在同一个提取POST API调用中返回JSON
我目前有一个基于Node.js的Express框架构build的Web应用程序。
我现在正在构build一个需要执行用户login的React Native应用程序。 为此,我创build了一个mongo-helpers.js
文件,它将简单地执行api调用localhost:3000 / api并返回JSON。 到目前为止,我没有任何问题进行GET
调用和接收数据,但是这是我的问题,我想要做什么:
目标 :按下loginbutton(在React Native应用程序中),调用localhost:3000 / api / login,将username
和password
传递到fetch
API POST
请求的body
中。 如果用户login,则发回用户的Mongo文档。
问题 :虽然我能够发出API Post请求并成功login用户,但我无法用res.json(user)
发送用户的Mongo文档。
这是我的代码:
Express WEB APP: routes / 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)) });
反应本机应用程序: mongo-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); }) } ) };
我正在loggingresponse
,这是它显示。 里面没有用户数据
你需要调用json函数,它会返回一个promise,试试:
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); }) }
在第一个callback中使用返回响应。