#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;