我有一个带有快速框架的node.js服务器.
var express = require('express');
var http = require('http');
var api_helper = require('./helpers/api_helper');
var app = express();
app.use(app.router);
app.use(express.bodyParser());
app.set('port', process.env.PORT || 8081);
app.post('/api/nodev1/users/login', function(req, res){
var email = req.param('email', null);
var password = req.param('password', null);
console.log(email);console.log(password);
});
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
Run Code Online (Sandbox Code Playgroud)
当我尝试向/ api/nodev1/users/login发布请求时,我无法读取参数.我正在尝试卷曲如下:
curl -d "email=user@example2.com" -d "password=mypassword" http://localhost:8081/api/nodev1/users/login
Run Code Online (Sandbox Code Playgroud)
电子邮件和密码未定义.
你必须app.use(app.router)向下移动app.use(express.bodyParser()).app.router只是一个处理你的路线的阶段的钩子.如果它在bodyParser身体未被解析之前出现.
您的代码可能看起来像这样(如果我无法解释可解释的话):
var app = express();
app.use(express.bodyParser());
app.set('port', process.env.PORT || 8081);
app.use(app.router);
// I added following line so you can better see what happens
app.use(express.logger('dev'));
app.post('/api/nodev1/users/login', function(req, res){ ... }
Run Code Online (Sandbox Code Playgroud)
Offtopic注释:express.bodyParser()只应在文件上传时使用.然后你必须要注意删除临时文件.如果您没有文件上传,那么您最好只使用
app.use(express.json());
app.use(express.urlencoded());
Run Code Online (Sandbox Code Playgroud)
我只是想在你不知道的情况下添加它.我遇到了问题,因为我不知道......
编辑Express 4
感谢@ jonathan-ong,app.use(app.router)Express 4 之后就没有了:
所有路由方法都将按其出现的顺序添加.你不应该这样做
app.use(app.router).这消除了Express最常见的问题.换句话说,混合
app.use()并将完全按照它们被调用的顺序app[VERB]()工作.