2017-05-03 52 views
1

我目前在Node.js的Express框架上构建了一个Web应用程序。在同一个提取POST API调用中返回JSON

我正在构建一个需要执行用户登录的React Native应用程序。为此,我创建了一个mongo-helpers.js文件,该文件将简单地执行api调用localhost:3000/api并返回JSON。到目前为止,我已经没有问题,使得GET通话和接收数据,但这里是我的问题,我想做什么:

目的:当按下登录按钮(在阵营生应用)使一个API调用localhost:3000/api/login,将usernamepassword传递给fetch API POST请求的body。如果用户登录,则发回用户的Mongo文档。

问题:虽然我能够使API发布采购信息,并成功登录的用户,我无法发送回用户的蒙戈文档与res.json(user)

这里是我的代码:

快递WEB APP:路线/ API/api.js

// POST and login user 
router.post('/login', (req, res) => { 
    user.findOne({name: req.body.name, password: req.body.password}) 
    .then((user) => { 
     console.log(user); 
     res.json(user) 
    }) 
    .catch((error) => res.json(error)) 
}); 

阵营原生应用:蒙戈 - helpers.js

// Returns a promise 
// if login succeeds then return the user 
// if login fails return error 
exports.login = (name, password) => { 
    return new Promise(
    (resolve, reject) => { 
     fetch(APP_SERVER_URL+'/login', { 
     method: 'POST', 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json' 
     }, 
     body: JSON.stringify({name, password}) 
     }).then((response) => { 
     console.log('Response', response); 
     }).then((data) => { 
     console.log(data); // returns undefined :(
     resolve(data); 
     }).catch((error) => { 
     console.log('Error', error); // no error is returned 
     reject(error); 
     }) 
    } 
) 
}; 

我登录了response,这里是什么它显示。有一个在第一则回调它

image of response object returned after POST request

+0

难道有'以.json()'函数的响应对象? – Brennan

+0

'console.log(user);'在服务器/节点控制台上输出是否正确? – Searching

+0

@搜索是的,它确实是 – szier

回答

2

你需要调用JSON功能,它会返回一个承诺,请尝试:

fetch(APP_SERVER_URL+'/login', { 
      method: 'POST', 
      headers: { 
       'Accept': 'application/json', 
       'Content-Type': 'application/json' 
      }, 
      body: JSON.stringify({name, password}) 
      }).then((response) => { 
      response.json().then((data) => { 
       console.log(data) 
      }); 
      }).catch((error) => { 
      console.log('Error', error); // no error is returned 
      reject(error); 
      }) 
     } 

https://developer.mozilla.org/en-US/docs/Web/API/Body/json

+1

是的工作!我打算发布答案,但你打败了我。谢谢您的帮助! – szier

0

使用返回响应中没有用户数据。

+0

这仍然只会给他相同的响应对象 – Brennan