【发布时间】:2014-12-08 10:55:17
【问题描述】:
我似乎无法恢复发送到我的 Node.js 服务器的发布请求的表单数据。我已经把服务器代码和发布请求放在下面(使用 chrome 中的邮递员发送):
发布请求
POST /api/login HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="userName"
jem
----WebKitFormBoundaryE19zNvXGzXaLvS5C
NodeJS 服务器代码
var express = require('express'); // call express
var app = express(); // define our app using express
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(bodyParser());
app.all('/*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type,accept,access_token,X-Requested-With');
next();
});
var port = process.env.PORT || 8080; // set our port
var router = express.Router(); // get an instance of the express Router
router.get('/', function(req, res) {
res.json({ message: 'I am groot!' });
});
// Login
router.route('/login')
.post(function(req, res){
console.log('Auth request recieved');
// Get the user name
var user = req.body.userName;
var aToken = getToken(user);
res.json({
'token':'a_token'
});
});
app.use('/api', router);
app.listen(port);
登录方法尝试获取req.body.userName,但是req.body 始终为空。
我在 SO 上看到过其他描述此类行为的案例,但相关答案均不适用于此处。
感谢您的帮助。
【问题讨论】:
-
问题是请求的正文是a
multipartmessage,而body-parser模块不支持解析该格式的数据。 2nd paragraph in its README 为您可以使用的其他模块提供建议。 -
或者,如果
POST请求中的数据不需要multipart,可以发送为x-www-form-urlencoded。这是bodyParser.urlencoded()解析的格式。 -
确实,感谢您的指出。我对 HTTP 的了解有限,所以不知道 form-urlencoded。这样,我的 node.js 可以正确处理来自小角度前端的发布请求。感谢您的帮助!
标签: node.js express post multipartform-data body-parser