Jem*_*Jem 30 post multipartform-data node.js express body-parser
我似乎无法恢复发送到我的Node.js服务器的post请求的表单数据.我把服务器代码和帖子请求放在下面(使用chrome中的postman发送):
发布请求
POST /api/login HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="userName"
jem
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
登录方法尝试获取req.body.userName,但req.body始终为空.我已经在SO上看到了描述这种行为的其他案例,但没有相关的答案在这里适用.
谢谢你的帮助.
cyb*_*sam 28
通常,快速应用程序需要指定适当的正文解析器中间件才能req.body包含正文.
[EDITED]
如果您需要解析url编码(非多部分)表单数据以及JSON,请尝试添加:
// Put this statement near the top of your module
var bodyParser = require('body-parser');
// Put these statements before you define any routes.
app.use(bodyParser.urlencoded());
app.use(bodyParser.json());
Run Code Online (Sandbox Code Playgroud)
首先,您需要将body-parser添加到dependencies您的属性中package.json,然后执行npm update.
要处理多部分表单数据,bodyParser.urlencoded()正文解析器将无法正常工作.请参阅此处建议的模块以解析多部分主体.
use*_*748 16
我遵循了这个 https://www.tutorialspoint.com/expressjs/expressjs_form_data.htm
var bodyParser = require('body-parser');
var multer = require('multer');
var forms = multer();
// apply them
app.use(bodyParser.json());
app.use(forms.array());
app.use(bodyParser.urlencoded({ extended: true }));
// how to use
router.post('/', function(req, res) {
console.log(req.body);
console.log('received the widget request');
});
Run Code Online (Sandbox Code Playgroud)
body-parser.app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
Run Code Online (Sandbox Code Playgroud)
(您还应该在请求标头中发送Content-Type:)application/json
body-parser+ multer。app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
app.use(multer().array())
Run Code Online (Sandbox Code Playgroud)
(在这种情况下,您不应该发送Content-Type: application/json。您不应该发送任何内容,或者Content-Type: multipart/form-data如果您有表单文件。
Content-Type: multipart/form-data手动发送。否则你会得到一个错误( Boundary not found)。(它会自动添加这个。)。)| 归档时间: |
|
| 查看次数: |
61716 次 |
| 最近记录: |