req.body не отображается как одна из пар ключ-значение, но req.headers и другие

1

Образец запроса расширенного клиента REST

Я использую Postman и Advanced REST-клиент для создания базового запроса POST для следующего кода -

'use strict';
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var http = require('http');

// configure the app to use bodyParser()
app.use(bodyParser.urlencoded({
    extended: false
}));
app.use(bodyParser.json());
//app.listen(6666);

http.createServer(function (req, res) {
    h2s(req, res);
}).listen(6666, '127.0.0.1');

console.log('Server running at http://127.0.0.1:6666/');

module.exports = function h2s(req, res) {
    console.log("inside h2s");
    app.use(function (req, res) {
        console.log("req.body : " + req.body);
        res.send("OK");
    });
}

Но, когда я отлаживаю, я обнаружил, что req.body отсутствует в дереве "req object". Что более странно, все изменения, которые я делаю для req.headers, доступны в дереве объектов req.

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

Может ли кто-нибудь из вас понять, почему req.body, кажется, отсутствует в дереве объектов req?

Будет очень полезно для меня. Спасибо!

Теги:
express
postman
advanced-rest-client

3 ответа

0
Лучший ответ

Похоже, у вас есть несколько проблем в коде:

вместо

http.createServer(function (req, res) {
    h2s(req, res);
 }).listen(6666, '127.0.0.1');

console.log('Server running at http://127.0.0.1:6666/');

module.exports = function h2s(req, res) {
    console.log("inside h2s");
    app.use(function (req, res) {
    console.log("req.body : " + req.body);
    res.send("OK");
   });
}

Для создания сервера попробуйте

http.createServer(app).listen(8000, '127.0.0.1'); //using http

Или (используя экспресс напрямую)

app.listen(8000,function(){
    console.log('Server running at http://127.0.0.1:8000/');
});

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

app.use(function (req, res) {
    console.log("req.body : " + req.body);
    res.send("OK");
});
  • 0
    Спасибо! Это помогло получить ответ 200 OK. Кроме того, как я могу добавить его в функцию? Я хочу разделить их по функциям.
  • 0
    @ Сэнди, какую часть ты бы хотел выполнить в отдельной функции? в коде пока не так много функциональности, вы просто создаете сервер и регистрируете функцию-обработчик для обработки вашего запроса. Конечно, если вы хотите, вы можете назвать функцию, например, как функция reqHandler (req, res) {console.log ("req.body:" + req.body); res.send ( "OK"); } И зарегистрируйте его как этот app.use (reqHandler)
Показать ещё 4 комментария
0

Уважаемый u set body parser Url Encoding to true

// configure the app to use bodyParser()
app.use(bodyParser.urlencoded({
    extended: true
}));

и проверить, распечатав req.body, он работает для меня и может для u также

  • 0
    Спасибо, Ратан. Постараюсь это и держать вас в курсе.
-1

доступ к req.body также возможен, когда

Content-Type: "применение/х-WWW-форм-urlencoded"

прочитай это
В вашем случае ваш контент-тип - application/json "

поэтому попробуйте изменить тип контента на "application/x-www-form-urlencoded",

также url кодирует параметры при отправке на сервер из JS

также решение может быть

// fire request
request({
    url: url,
    method: "POST",
    json: true,
    headers: {
        "content-type": "application/json",
    },
    body: JSON.stringify(requestData)
}, ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню