【问题标题】:Update value with put - ExpressJS, nodeJS使用 put 更新值 - ExpressJS、nodeJS
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 啊,开始工作了 :) 谢谢@Nenad Milosavljevic。
【解决方案2】:

尝试使用 body-parser 中间件
在这里查看: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;
    

    【讨论】:

      猜你喜欢
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      • 2018-08-28
      • 1970-01-01
      • 2021-03-30
      • 2013-12-13
      • 1970-01-01
      相关资源
      最近更新 更多