Как управлять данными запроса в файле ввода в node js - PullRequest
0 голосов
/ 07 февраля 2020

В Node Js, в файле ввода, например, индекс. js, Как я могу получить запрошенные данные в виде данных формы или в форме URL-кода или в виде необработанных данных JSON в промежуточном программном обеспечении?

В моем проекте я обрабатываю различные запросы API. Несколько запросов содержат тип файла, поэтому запрашиваются как данные формы. Немногие запросы не содержат тип файла, поэтому запросы поступают в виде Form-URL-кода.

Теперь главная проблема перед маршрутизацией, мне нужно поле c, указанное в req.body в промежуточном программном обеспечении. Но я получаю req.body как неопределенное.

Для справки вот мой индекс. js файл:

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

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

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

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

и файл routes/index.js следующим образом:

module.exports = function (app, express, req) {

    console.log(req.body); 
    //I need here data of req.body for all requests type (form data, URL-encoded, raw JSON)

    app.post('/', function (req, res) {
     console.log("Here I can get the requested body easily", req.body)
     res.send('Hello World');
    });

    app.post('*', function (req, res) {
        res.send({
            code: 0,
            message: 'No Content',
            status_code: 204,
            data: {
                error: 'API not found!'
            }
        });
    });
}

Кроме того, я знаю, что для данных типа файла POSTMAN будет отправлять запрос как данные формы, а не как URL-адрес формы. Так что я должен выбрать Formidable или Multer?

Ответы [ 2 ]

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

Способ получения всех данных в index.js заключается в создании промежуточного программного обеспечения для вашего приложения, каждый раз, когда любые маршруты, которые go в ваше приложение, будут проходить через это промежуточное программное обеспечение.

Функции промежуточного программного обеспечения - это функции, которые имеют доступ к объекту запроса (req), объекту ответа (res) и следующей функции в цикле запрос-ответ приложения. Следующая функция - это функция в маршрутизаторе Express, которая при вызове выполняет промежуточное ПО, следующее за текущим промежуточным ПО.

Нижеприведенное промежуточное ПО просто прослушивает все маршруты и добавляет время запроса к запросу время, здесь идет код

let express = require('express')
let app = express()
let bodyParser = require("body-parser")
app.use(bodyParser.json())
let requestTime = function (req, res, next) { // simply updating add the requestBody using the middleware
 req.requestTime = Date.now();
 req.json_body = req.body;
 next()
}
app.use(requestTime) // requestTime is the middleware here

app.get('/', function (req, res) {
 var responseText = 'Hello World!<br>'
 responseText += '<small>Requested at: ' + req.requestTime + '</small>'
 res.send(responseText)
})

app.listen(3000)

Несколько вещей, чтобы отметить здесь

  • Всегда добавляйте перехватчик над всеми маршрутами
  • Не забудьте добавить next() внутри промежуточного программного обеспечения, иначе он не будет go до следующего маршрута.

Теперь перейдем ко второй части вашего вопроса о доступе к body, formdata и т. Д. c

Вы можете использовать body-parser npm модуль для достижения этого, что-то вроде этого Начиная с Express 4 , в него встроен анализатор тела, так что вы можете попробовать что-то

app.use(express.json());

app.use(
  bodyParser.urlencoded({
  extended: false
 })
);

Теперь, последний бит, вам не нужно Multer для форм-данных, но для загрузки файла, например multipart/form-data, вам это понадобится. Оба хороши по-своему, я бы go для Multer .

Надеюсь, это поможет вам:)

0 голосов
/ 07 февраля 2020

Я считаю, что модуль body-parser является вашим ответом.

https://www.npmjs.com/package/body-parser

Добавьте следующую строку перед маршрутами в вашем index.js после установки body-parser пакет.

app.use(bodyParser.json())
...