【发布时间】:2016-04-06 05:37:56
【问题描述】:
我的 app.js 中有以下设置:
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
var router = express.Router();
require('./routes/index')(router);
app.use(router);
在我的 routes/index.js 中,我定义了所有路由:
module.exports = function (router) {
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Home' });
});
router.post('/', function(req, res, next) {
console.log(req.body);
});
}
然后在我的应用入口点bin/server.js:
var app = require('../app');
var debug = require('debug')('NodeJSDemo:server');
var http = require('http');
var port = 3000;
app.set('port', port);
var server = http.createServer(app);
server.listen(port);
当我使用请求正文对 http://localhost:3000/ 进行 POST 调用时,控制台日志中的控制台日志请求正文未定义。
我的设置有什么问题吗?从这个帖子Express.js req.body undefined看来只要我打电话
app.use(bodyParser.json())
在加载路线之前,应该没问题,但似乎没有。
【问题讨论】:
-
尝试在 app.use(bodyParser.json()); 之前添加这一行app.use(bodyParser.urlencoded({extended: true }));
-
不走运 :( 这应该是微不足道的,不知道为什么 express 不支持它们内置。
-
我推荐使用 express generator 生成一个 express 应用,看这里:expressjs.com/en/starter/generator.html
-
其实这和我的目录结构一模一样,唯一改变的是我没有调用启动脚本www.js,而是重命名为server.js
-
您如何向服务器发出 POST 请求?具体来说,您将
Content-Type设置为哪些请求?请注意,bodyParser 不处理Content-Type设置为multipart/form-data的请求:npmjs.com/package/body-parser
标签: javascript node.js express