node.js,express,如何在post请求中从body form-data中获取数据

alf*_*229 12 javascript node.js express

我有一个简单的 node.js 应用程序。我想从用户那里获取帖子正文。

应用程序.js

var express = require('express');
var app = express();

app.use(express.json());

app.post('/api/user', function (req, res) {
    console.log(req.body);
    console.log(req.body.username);
});

module.exports = app;
Run Code Online (Sandbox Code Playgroud)

服务器.js

var app = require('./app.js');

var server = app.listen(3000, function () {

    var port = server.address().port;

    console.log('Web App Hosted at http://localhost:%s',port);

});
Run Code Online (Sandbox Code Playgroud)

当我用 启动它时node server.js,它很好。当我与邮递员核对时, 在此处输入图片说明

在控制台中,它返回

Web App Hosted at http://localhost:3000
{}
undefined
Run Code Online (Sandbox Code Playgroud)

我有最新的快递。

我也尝试过其他的事情,比如 add body-parser,add header to content-type, add express.urlencoded(),但没有工作。我需要从form-data上面图片中的邮递员那里获取数据。我怎样才能得到它?

alf*_*229 29

几个小时后,我找到了。

body-parser 不需要,因为在最新的 express 中包含了。

我找到了如何获取表单数据,它需要 multer(用于解析多部分/表单数据)中间件。我在这里找到

首先安装multer

npm install multer --save
Run Code Online (Sandbox Code Playgroud)

在您的应用程序中导入multer。例如在我的代码中

var express = require('express');
var app = express();
var multer = require('multer');
var upload = multer();

// for parsing application/json
app.use(express.json()); 

// for parsing application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true })); 

// for parsing multipart/form-data
app.use(upload.array()); 
app.use(express.static('public'));

app.post('/api/user', function (req, res) {
    console.log(req.body);
    console.log(req.body.username);
});

module.exports = app;
Run Code Online (Sandbox Code Playgroud)

因此,它可以接收表单数据、原始数据或 x-www-form-urlencoded。

  • 我也遇到了同样的问题,花了3个小时试图找出问题所在。最后,我还忘记在我的路线中包含我的 multer 函数:) (4认同)