【发布时间】:2021-11-03 11:50:52
【问题描述】:
我是 ExpressJS 和 NodeJS 的新手。 我一直在尝试谷歌,并浏览了一些不同的 StackOverflow 帖子,但似乎无法找到答案。
我关注了一个 YouTube 视频,并创建了一个名为 users 的数组。我为此创建了 get 和 put 方法,我可以调用它们,然后使用 res.send('message'),它可以工作。
但是,每当我尝试更新属于特定用户的“名称”时,我都会不断地得到“未定义”的值。
我试过了:
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 中将其设置为 PUT,并将“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 (let index = parseInt(req.params.id)), (let index = +req.params.id),以及使用 body-parser 中间件,但我似乎都没有工作,出于某种未知的原因。 在这一点上,我怀疑我对 Postman 做错了什么,并且它正在发送“未定义”。即使在 Webstorm 确认(res.send('msg)) 它通过了该代码之后,它似乎也停留在“发送请求”。
我把它作为一个 PUT 请求,在请求 URL 中加上“localhost:3000/users/1”,在参数中,我把“key”放在“name”中,把“value”放在“newSally”中。之后我按下蓝色的“发送”按钮。
我将假设它与代码无关,但与 Postman 有关。谢谢你的帮助:)@Nenad Milosavljevic,@Liki,@Georges Feungap
【问题讨论】:
-
我更新了我的答案。你能再检查一遍吗?
标签: javascript node.js express postman