2013-11-14 3 views
2

Так что я на стороне клиента в контроллере:Как десериализируются данные JSON в Экспресс/Node.js

$scope.authenticate = function() { 
      var creds = JSON.stringify({email: this.email, password: this.password}); 
      $http.post('/authenticate', creds). 
       success(function(data, status, headers, config) { 
        // etc 
       }). 
       error(function(data, status, headers, config) { 
        // etc 
       }); 
     }; 

А на стороне сервера:

app.post('/authenticate', function(req, res) { 
    console.log("Unserialized request: " + JSON.parse(req)); 
}); 

Но я получаю ошибка при попытке проанализировать запрос. Я не могу понять, почему. Есть идеи?

+2

Вы, вероятно, не хотите разбирать сам объект запроса. Вы хотите разобрать поле в теле (req.body или req.body.whatever) –

ответ

4

Используйте промежуточное программное обеспечение express.bodyParser, которое будет выполнять синтаксический анализ для вас и даст вам req.body как объект, готовый к работе.

var express = require('express'); 

app.post('/authenticate', express.bodyParser(), function(req, res) { 
    console.log("Unserialized request: " + req.body); 
}); 
+0

Это сработало, спасибо! –

4

Чтобы завершить ответ Питера Лайонса, я думаю, что вы можете использовать express.bodyParser(), но это лучше, если вы используете

[express.urlencoded(), express.json()] 

вместо

express.bodyParser() 

т.е.

app.post('/authenticate', [express.urlencoded(), express.json()], function(req, res) { 
console.log("request body= " + req.body); 
}); 

Он также заботится о разборе t он просит. Но, это более безопасно, и поскольку вам нужен только json, а не какой-либо файл. Если вы используете bodyParser, любой может отправить файл, а также ваш почтовый запрос.

+0

Прочитали несколько вопросов об этом, и это единственное решение, которое работает с новой версией. Благодаря! – tbraun

Смежные вопросы