Как получить тело запроса в промежуточном программном обеспечении Node JS из данных многочастной формы? - PullRequest
0 голосов
/ 06 февраля 2020

Я знаю, что легко получить запрошенное тело, используя следующее:

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

Но мой вопрос отличается от описанного выше. Вот мой индекс. js file (entry file).

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:

enter image description here

Ответы [ 3 ]

1 голос
/ 06 февраля 2020

Попробуйте использовать body-parser. Вы можете найти пример кода здесь из express. js

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();
});
1 голос
/ 06 февраля 2020

Пожалуйста, используйте multer для получения данных формы

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

app.use(upload.array()); 
0 голосов
/ 06 февраля 2020

просто создайте функцию промежуточного программного обеспечения следующим образом:

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

и используйте ее перед маршрутом пост-запроса, как этот ..

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

, поскольку тело доступно только в определенных типах запросы http, включая post, put и недоступные в запросах get, поэтому вы не получите console.log () в этих запросах.

...