如何从多部分表单数据中获取 Node JS 中间件中的请求主体?

How to get request body in Node JS middle ware from multi-part form data?

我知道使用以下方法很容易获得请求的正文:

app.post('/api', (req, res) => { conosle.log(req.body); })

但是我的问题和上面的不一样。这是我的 index.js 文件(入口文件)。

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

const config = require('./config/config.js');

app.use(express.raw());
app.use(express.urlencoded({ extended: true }));

app.use((req, res, next) => {

  console.log(req.body); **// here I am not getting req.body**

  const routes_handler = require('./routes/index.js')(app, express, req);
  next();
});


app.listen(config.SERVER.PORT, () => {
  console.log("Server running at Port " + config.SERVER.PORT);
});

仅供参考,使用邮递员,我将请求作为表单数据传递。在表单中,还有一个字段作为文件类型(图片)。在处理 API 部分时,我使用 multer 并根据需要获取 req.body 。

但我只想知道如何在中间件块中获得 req.body,即

 app.use((req, res, next) => {//HERE req.body })

我的POSTMAN简单请求如下:

请使用 multer 获取表单数据

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

app.use(upload.array()); 

简单地制作一个像这样的中间件功能:

const middleware = (req,res,next) =>{
     console.log(req.body);
     // all your multer logic here
}

并在你的 post 请求路由之前使用它,就像这样..

app.post('/' , middleware , (req,res,next) =>{
// all your api logic here 
});

因为 body 仅在某些类型的 http 请求中可用,包括 post,put 而在 get 请求中不可用,因此您不会在这些请求中获得 console.log()。

尝试使用正文解析器。您可以从 express.js

中找到示例代码 here
const app = require('express')()
const bodyParser = require('body-parser')
const multer = require('multer')

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))

app.use(multer.array(), (req, res, next) => {

  console.log(req.body);

  const routes_handler = require('./routes/index.js')(app, express, req);
  next();
});