【发布时间】:2013-12-21 06:36:49
【问题描述】:
我正在使用 NodeJS 和 Express(以及更多的东西,如 mongo、套接字等)开发 API,但我相信我坚持一个非常简单的步骤。我只是想从 POST req 对象中获取信息,但在尝试访问 req.body 时出现错误
这是我所拥有的:
var express = require('express'),
http = require('http'),
path = require('path'),
fs = require('fs'),
io = require('socket.io');
dynroute = require('dynroute');
var app = express();
app.set('port', process.env.PORT || 3999);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(app.router);
app.use(express.bodyParser());
app.post('/user', function(req, res) {
console.log(JSON.stringify(req.body));
res.send(req.body.self);
});
http.createServer(app).listen(app.get('port'), function ()
{
console.log('App Server is now running at:' + app.get('port'));
});
在console.log(JSON.stringify(req.body)); 我得到undefined 在res.send(req.body.self); 我得到TypeError: Cannot read property 'self' of undefined
我一直在寻找这种类型的错误,通常问题是人们不包含 app.use(express.bodyParser()); 中间件,所以我也尝试使用 app.use(express.urlencoded()); 和 app.use(express.json());,但也没有用。
如果我执行console.log(req),我可以看到整个对象,但看不到body 或我在从客户端执行 POST 请求时传递的任何内容(我将其传递为JSON)。
**我知道我可以使用 restify 或 sails.js 在 Node 中构建 API,但我想自己做所有事情,以便从经验中学习。*
谢谢
编辑:
我不得不将bodyparser 中间件放在app.router 中间件之前,这样就解决了!
【问题讨论】:
-
我建议发布有关您如何发出发布请求的信息。如果 req 对象没有接收到“body”,那么我的第一个想法是 post 请求没有成功。
-
我正在使用一个名为 Advanced Rest Client 的 Chrome 应用程序,我只是向我的 URL 发出一个 POST 请求,将
['user':'kevinblanco']作为内容,并将 application/json 作为内容类型标头。跨度> -
我希望 express、node 有一个版本号,无论这个问题(及其答案)中指出什么。我认为它现在已经过时了,因为今天遇到了这样的问题,但只有当远程服务器返回状态代码 4xx 时。表达 4.13.1。身体解析器 1.13.2。接受的答案也无济于事。
标签: javascript json node.js express sails.js