2017-08-31 240 views
0

此問題可能之前已被回覆,但似乎無法找到正確的答案。我正在創建一個Ionic項目,我在其中創建了另一個使用Node.js和express.js處理所有http請求的項目。目前兩者都在本地主機上運行。當我試圖從客戶端發送一些數據到服務器端時,我從請求中獲得的數據看起來像這樣當我console.log(req.body):無法從服務器端使用Ionic和Express.js從客戶端獲取數據

{ '{"username":"[email protected]"}': '' }

我試了兩個req.body [用戶名]等等來獲取數據,但它只是得到了未定義。

我來處理HTTP請求的控制器是這樣的:

$scope.submit = function(){ 
    var username = $scope.username; 
    console.log($scope.data.username); 
    $http({ 
    method: 'POST', 
    url: 'http://localhost:8000/api/users', 
    data: username, 
    headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Access-Control-Allow-Origin': '*'} 
}); 

HTML元素

<input type="text" ng-model="data.username" name="name"> 

服務器端API看起來是這樣的:

router.post('/users', function (req, res) { 
    var username = req.body; 

    var newUser = new User({ 
     username: username 
    }) 

    newUser.save(function (err) { 
     if (err) { 
      return res.send(500, err); 
     } 
     return res.json(200, newUser); 
    }); 
}); 

Server.js bodyparser包括

app.use(bodyParser.json()); 
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); 
app.use(bodyParser.urlencoded({ extended: true })); 
+0

你能告訴我們你的控制器中存儲了什麼用戶名 – turmuka

回答

0

對象具有鍵和值

{ key: value } 

身體上的對象是一些錯誤的方式,因爲你發送與他們鍵對象「{‘用戶名’beeing發送:「你好你好@。 com「}」,其值爲''。

我會建議您修復如何發佈到您的nodejs/express服務器。但是你可以通過一些黑客獲得價值。喜歡這個。

const body = {'{"username":"[email protected]"}': '' } 

const keys = Object.keys(body); 
const parsed = JSON.parse(keys[0]); 
console.log(parsed.username); 

https://jsfiddle.net/wejh0fsk/2/

編輯:所以我在做什麼這裏獲取對象的所有密鑰。只有一個關鍵'{「用戶名」:「[email protected]」}'。由於該鍵是一個字符串,我解析它來獲得一個對象。現在我有一個對象

{ username: '[email protected]' } 

最後我註銷了用戶名。

正確的解決方案將解決您將數據發送到快速服務器的方式。

我不太瞭解你的控制器。你的NG-模型data.username但後來你把

var username = $scope.username 

var username = $scope.data.username // (that's at least what you're binding to in your view) 

而且要發送與職位的對象,而不僅僅是值

$scope.submit = function(){ 
    var username = $scope.username; 
    console.log($scope.data.username); 
    $http({ 
    method: 'POST', 
    url: 'http://localhost:8000/api/users', 
    data: { username: username }, 
    headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Access-Control-Allow-Origin': '*'} 
}); 

我不確定表達解析器,但我不知道你爲什麼要調用bodyparser兩次。第一個應該就夠了。

相關問題