Почему я получаю пустой запрос?
Использую в своих проектах на стороне клиента vue.js, а сервера - node+express
Код POST-запроса выглядит так:
const bodyParser = require('body-parser');
const {Router} = require('express');
const router = Router();
let jsonParser = bodyParser.json();
router.post('/', jsonParser,(req, res) => {
console.log(req.body);
res.json('Hi')
});
module.exports = router;
Используя POSTMAN или rested запрос приходит успешно, req.body отображается корректно. Однако, если отправляю запрос со стороны своего клиента получаю в ответ пустое тело.
addCar: async function (titleOfCar) {
if (titleOfCar.length === 0) {
alert('Введите, пожалуйста, модель автомобиля');
} else {
try {
await fetch(this.url, {
method: 'POST',
mode: 'no-cors',
body: JSON.stringify(new Car(this.adminCars.length + 1, titleOfCar, [new Work('', 0)])),
headers: {"Content-Type": "application/json"}
})
.then(res => {
res.json();
})
.then(data => {
this.selectedCar = data
})
} catch (e) {
console.error('Ошибка:', e.message);
}
await this.load();
}
}
В чем может быть моя ошибка?
Ответы (2 шт):
Автор решения: Aziz Umarov
→ Ссылка
Измените
.then(res => {
res.json();
})
На
.then(res => {
return res.json();
})
Либо на
.then(res => res.json())
Автор решения: Павел Петров
→ Ссылка
У данной ситуации причиной послужило то, что на стороне клиента запросы отправлялись с установленным mode: 'no-cors'. Данный кусочек был удален, на стороне сервера установил пакет cors, который устраняет проблему с CORS policy. Настраивал middleware согласно документации: https://expressjs.com/en/resources/middleware/cors.html