Обновить значение с помощью put — ExpressJS, NodeJS

#javascript #node.js #express #postman

Вопрос:

Я новичок в ExpressJS и NodeJS. Я пытался Google и просмотрел несколько разных сообщений StackOverflow, но, похоже, не могу найти ответ на этот вопрос.

Я посмотрел видео на YouTube и создал массив с именем users . Для этого я создал методы get и put, которые я могу вызывать, а затем использовать res.send('message') , что работает. Но всякий раз, когда я пытаюсь обновить «имя», принадлежащее определенному пользователю, я постоянно получаю значения «undefined». Я пробовал:

     users[req.params.id].name = req.body.name
 

а также:

     users[req.params.id].name = req.params.name   (Should be req.body.name, but still 
                                                         tried)
 

И даже:

     users[req.params.id]={
    name: "req.params.body"
    }                                //Which also doesn't work.
 

Как ни странно, когда я жестко его кодирую, это работает. Хотя Postman требует некоторого времени для загрузки, а ввод next() просто приводит к сбою. Я установил его для ВВОДА в Postman и «localhost:3000 / users / 1» в качестве URL-адреса запроса (индекс 1 в массиве).

Жесткий код:

     users[req.params.id].name = "newSally"
 

Это мой код:

     const express = require('express')
    const router = express.Router()
    module.exports = router
    
    const morgan = require('morgan')
    
    router.use((req, res, next) =>{
        router.use(morgan('dev'))
        next()
    })
    
    
    router.route("/:id").get((req, res) => {
        res.send(`Getting user with the ID: ${req.params.id}, also known as: ${req.user.name} ${req.user.familyName}, and is: ${req.user.age} years old!`)
    }).put((req, res) => {
        users[id].name = req.body.name          //<--- Sets "undefined" as a new name     
                                                           
    }).delete((req, res) => {
        res.send(`Deleting user with the ID: ${req.params.id}`)
    })
    
    let users =[{name:"Kyle", familyName:"Horton", age:20}, {name:"Sally", familyName:"Myers", age:22}]
    router.param("id", (req, res, next, id) =>{
        req.user = users[id]
        next()
    })
 

Спасибо!

РЕДАКТИРОВАТЬ: попытался проанализировать его в int (пусть index = parseInt(req.params.id )), (пусть индекс = req.params.id ), а также использование промежуточного программного обеспечения body-parser, но мне кажется, что ни одно из них не работает по какой-то неизвестной причине. На данный момент я подозреваю, что я делаю что-то не так с Postman и что он отправляет «undefined». Похоже, что он также остается на «отправке запроса» даже после того, как Webstorm подтвердил (res.send(‘msg)), что он прошел мимо этого кода.

Я помещаю его в виде запроса PUT и «localhost:3000 / users / 1» в URL-адрес запроса, а в параметрах я помещаю «ключ» в «имя» и «значение» в «newSally». После этого я нажимаю синюю кнопку «Отправить».

Я собираюсь предположить, что это не связано с кодом, но имеет какое-то отношение к Postman. Спасибо за вашу помощь 🙂 @Ненад Милосавлевич, @Лики, @Джордж Фоунгап

Комментарии:

1. Я обновил свой ответ. Можете ли вы проверить это еще раз?

Ответ №1:

Когда вы добавляете данные в Params раздел в Postman, они доступны в req.query объекте на сервере. Итак, измените свой код на использование req.query вместо req.body .

 users[req.params.id].name = req.query.name;
 

Если вы хотите, чтобы данные были доступны в req.body , вы должны добавить их в Body раздел в Postman.

Комментарии:

1. Ааа, получилось 🙂 Спасибо, @Nenad Milosavljevic.

Ответ №2:

Попробуйте использовать промежуточное программное обеспечение для синтаксического анализа тела
, проверьте это здесь: http://expressjs.com/en/resources/middleware/body-parser.html
добавьте этот блок кода ниже создания экземпляра express

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

 

Ответ №3:

вы можете просто сделать это:

 let index =  req.params.id;