使用 put 更新值 - ExpressJS、nodeJS

Update value with put - ExpressJS, nodeJS

我是 ExpressJS 和 NodeJS 的新手。 我一直在尝试 Google,并且浏览了一些不同的 Whosebug 帖子,但似乎找不到答案。

我关注了一个 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 中间件,但我 none似乎工作,出于某种未知的原因。 在这一点上,我怀疑我在使用 Postman 时做错了什么,它正在发送“未定义”。即使在 Webstorm 确认(res.send('msg))它通过了该代码之后,它似乎也停留在“发送请求”。

我把它作为一个 PUT 请求,在请求 URL 中输入“localhost:3000/users/1”,在参数中,我将“key”放在“name”和“值”到“newSally”。之后我按下蓝色的“发送”按钮。

我假设它与代码无关,但与 Postman 有关。感谢您的帮助:) @Nenad Milosavljevic、@Liki、@Georges Feungap

当您在 Postman 的 Params 部分中添加数据时,该数据在服务器上的 req.query 对象中可用。因此,更改您的代码以使用 req.query 而不是 req.body.

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

如果您希望数据在 req.body 中可用,您应该将其添加到 Postman 的 Body 部分。

尝试使用 body-parser 中间件
在这里查看:http://expressjs.com/en/resources/middleware/body-parser.html
在 express

的实例化下方添加此代码块
const bodyParser = require('body-parser')
app.use(bodyParser.json())

你可以简单地这样做:

let index = +req.params.id;