@JordanBelford

Почему при отправке PUT запроса приходит undefined?

Добрый день! Отправляю с клиента fetch запрос с вот таким body: body: JSON.stringify({"id": "2"}). С серверной части обрабатываю этот put запрос, но в тело запроса приходит undefined, в чем мб проблема?
Серверная часть:
router.put('/', async (req, res) => {
    const {id} = req.body;
    res.send(console.log(id))
});
Клиентская часть:
fetch('http://localhost:5000/api', {
            method: 'PUT',
            body: JSON.stringify({
                "id": "2"
            })
        })
  • Вопрос задан
  • 340 просмотров
Решения вопроса 1
alexk111
@alexk111
Автор Ботодрома (автоматизация Telegram, VK и др.)
Проблема по всей видимости в том, что middleware асинхронный, а об окончании его выполнения нет оповещения (не вызывается next()).

Вариант 1. Либо уберите async - он, судя по синхронной работе содержимого, тут не нужен:

router.put('/', (req, res) => {
    const {id} = req.body;
    console.log(id);
    res.send(id);
});


Вариант 2. Еслии все таки планируется какая-то асинхронная работа внутри middleware, тогда используйте next(), чтобы объявить окончание выполнения асинхронного middleware

router.put('/', async (req, res, next) => {
    const {id} = req.body;
    console.log(id);
    res.send(id);
    next();
});


UPD1: В клиентской части при обращении к /api не передается заголовок "content-type", соответствующий передаваемому body.

Должно быть так:

fetch('http://localhost:5000/api', {
            method: 'PUT',
            headers: {
              'Content-Type': 'application/json',
            },
            body: JSON.stringify({
                "id": "2"
            })
        })


UPD2: как верно подметил Игорь Махов - console.log в res.send вам вряд ли нужен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Вы прикалываетесь? Зачем вам в res.send нужен console.log?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы