我似乎无法恢复发送到我的Node的post请求的表单数据。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
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);
login方法尝试获取req.body.userName
,但是req.body
始终为空。我在SO上看到过其他描述这种行为的案例,但没有一个相关的答案适用于这里。
谢谢你帮忙
7条答案
按热度按时间goqiplq21#
一般来说,Express应用需要指定适当的body-parser middleware,以便
req.body
包含正文。[编辑]
1.如果您需要解析url编码的(非多部分)表单数据以及JSON,请尝试添加:
首先,您需要将body-parser添加到
package.json
的dependencies
属性,然后执行npm update
。1.要处理多部分表单数据,
bodyParser.urlencoded()
正文解析器将无法工作。请参阅此处建议的模块来解析多部分主体。pnwntuvh2#
我跟着这个https://www.tutorialspoint.com/expressjs/expressjs_form_data.htm
fhg3lkii3#
要处理支持文件上传的multipart/form-data请求,需要使用multer模块。npm link for multer middleware
i7uq4tfw4#
body-parser
。(you还应发送
Content-Type
:请求报头中的application/json
)body-parser
+multer
。(You在这种情况下不应该发送
Content-Type: application/json
。你应该什么都不发送,或者Content-Type: multipart/form-data
,如果你有表格中的文件。Content-Type: multipart/form-data
。否则,你会得到一个错误(Boundary not found
)。(它将自动添加此内容。).)whitzsjs5#
请确保按此顺序放置:bodyParser.首先使用json()。
app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true }));
kgqe7b3p6#
确保你没有把enctype写成multipart/form-data,body parser不支持它。在定义任何路由之前,请使用下面的线。
app.use(bodyParser.return();app.use(bodyParser.public void run();
ryevplcw7#
我发现,在我的例子中,我没有在HTML输入标记中使用“name”属性。我通过改变来修复它:
这个
为了