2017-05-03 55 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