req.body не определено в почтовом маршруте приложения express - PullRequest
2 голосов
/ 12 апреля 2020

Это мой маршрутизатор

router.post('/', async(req, res) => {

const posts = await loadPostsCollection()

await posts.insertOne({
    text: req.body.text,
    createdAt: new Date()
})
res.status(201).send()
})

Это ошибка терминала

listeining на порт 3090 ..... (узел: 7764) UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'текст' неопределенного в /Users/macbook/Desktop/node-project/server/routes/api/posts.js:19:24 at processTicksAndRejected (внутренний / process / task_queues. js: 94: 5) ( узел: 7764) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри asyn c -функции не было блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch () (идентификатор отклонения: 1) (узел: 7764) [DEP0018] Предупреждение об устаревании: отклонение необработанного обещания устарело. В будущем отклонения обещания, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.

1 Ответ

4 голосов
/ 12 апреля 2020

Это потому, что ваш req.body даст значение undefined. Поэтому, когда вы пытаетесь выполнить req.body.text, вы получаете сообщение об ошибке при попытке получить доступ к свойству text для значения undefined.

Причина, по которой вы получаете undefined, заключается в том, что ваш * Приложение 1032 * не может проанализировать тело запроса.

Для этого вам нужно установить зависимость промежуточного программного обеспечения body-parser,

npm i body-parser

И затем добавьте это промежуточное ПО в ваше express приложение,

const bodyParser = require('body-parser')
app.use(bodyParser.json())

Ссылка: https://expressjs.com/en/resources/middleware/body-parser.html

Вот пример приложения,

const express = require('express')
const app = express()
const bodyParser = require('body-parser')
app.use(bodyParser.json())

app.post('/', (req, res) => {
    return res.send(`Hello ${req.body.name}!`)
})

app.listen(3000, () =>
    console.log(`Example app listening at http://localhost:${port}`)
)

Теперь, если вы запустите приведенный выше пример приложения с помощью curl,

curl -XPOST localhost:3000 -H "Content-Type: application/json" -d '{"name":"Ram"}'

Вы получите ответ «Hello Ram!»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...