Тело запроса не определено - PullRequest
0 голосов
/ 14 февраля 2019

Я использую Express.js для создания API.

Проблема, с которой я сталкиваюсь, - это доступ к телу запроса.

Я могу получить доступ к телу, когда api находится на server.js.

// backend/server.js
const express = require("express");
const app = express();
const bodyParser = require("body-parser");

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

app.post("/hello", (req, res) => {
  console.log(req.body);
});

почтовый запрос почтальона в "/ hello"

успешно работающий API

Так что все работает нормально.Это хорошо.Однако в этом случае это не работает.

// backend/server.js
app.use(require("./routes"));


// backend/routes/index.js
const express = require("express");
const router = express.Router();

router.use("/api", require("./api"));

module.exports = router;


// backend/routes/api/index.js
const express = require("express");
const router = express.Router();

router.use("/users", require("./users"));

module.exports = router;


// backend/routers/api/users.js
const router = require("express").Router();
router.post("/", auth.optional, (req, res, next) => {
    console.log("hello");
    console.log(req.body);
}

не удалось отправить сообщение почтальона в "/ api / users"

не удалось api

Как видите, этот API api / users работает нормально, но я не могу получить доступ к телу запроса: (

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

В первом примере вы импортируете body-parser с этой строкой:

const bodyParser = require("body-parser");

И затем вы включаете его:

app.use(bodyParser.json());

Обе необходимы, чтобы req.bodyсуществует и содержит то, что вы ожидаете - проанализированный JSON-объект, взятый из потока запросов.

Во втором примере отсутствуют обе строки, поэтому req.body равно undefined.Вам нужно добавить их в ваш образец, тогда он будет работать.

Обратите внимание, что req.body не предоставляется самим Express, но является расширением, предоставляемым промежуточным программным обеспечением body-parser, поэтому вам необходимо установитьэто, импортируйте это, и фактически use это.

Для примера того, как использовать body-parser, см. его документацию, либо раздел Express / Connect верхнего уровня generic илисекция Экспресс для конкретного маршрута .

0 голосов
/ 14 февраля 2019

Вы можете попробовать использовать body-parser или multer middleware, возможно, он вам поможет

  npm install body-parser --save

, а затем сделать это в своем коде

 var bodyParser = require('body-parser')
 var app = express()

parse application / x-www-form-urlencoded

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

приложение разбора / json

   app.use(bodyParser.json())

или

Если ваш анализатор тела не работает, попробуйте с промежуточным программным обеспечением multer:

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

app.post('/profile', upload.none(), function (req, res, next) {
    // req.body contains the text fields
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...