首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用put - ExpressJS,nodeJS更新值

使用put - ExpressJS,nodeJS更新值
EN

Stack Overflow用户
提问于 2021-09-06 11:20:27
回答 3查看 1.3K关注 0票数 1

我是ExpressJS和NodeJS的新手。我一直在尝试谷歌,并浏览了几个不同的StackOverflow帖子,但似乎找不到答案。

我跟踪了一个YouTube视频,并创建了一个名为users的数组。我为此创建了get和put方法,我可以调用这些方法,然后使用res.send('message'),它可以工作。但是,每当我试图更新属于特定用户的“名称”时,我总是会得到“未定义”的值。我试过:

代码语言:javascript
运行
复制
    users[req.params.id].name = req.body.name

以及:

代码语言:javascript
运行
复制
    users[req.params.id].name = req.params.name   (Should be req.body.name, but still 
                                                         tried)

甚至:

代码语言:javascript
运行
复制
    users[req.params.id]={
    name: "req.params.body"
    }                                //Which also doesn't work.

奇怪的是,当我硬编码它的时候,它就起作用了。虽然邮递员需要一些时间来加载,但是放置一个next()就会使它崩溃。我将其设置为放置Postman,并将“localhost:3000/user/1”设置为请求URL(数组中的索引1)。

硬编码:

代码语言:javascript
运行
复制
    users[req.params.id].name = "newSally"

这是我的密码:

代码语言:javascript
运行
复制
    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解析器中间件,但由于一些未知的原因,它们似乎都不起作用。在这一点上,我怀疑我对邮递员做错了什么,而且它发出的是“未定义的”。它似乎也停留在“发送请求”,即使在Webstorm确认(res.send(‘msg))超过了该代码之后。

我将其作为put请求,并将“localhost:3000/user/1”放在请求URL中,在params中将"key“插入"name”,将"value“放入"newSally”。之后,我按下蓝色的“发送”按钮。

我将假设这与代码无关,而是与邮递员有关。谢谢你的帮助:) @Nenad Milosavljevic,@Liki,@Georges Feungap

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-09-06 11:30:30

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

代码语言:javascript
运行
复制
users[req.params.id].name = req.query.name;

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

票数 2
EN

Stack Overflow用户

发布于 2021-09-06 11:30:56

尝试使用身体解析器中间件。

看看这里:http://expressjs.com/en/resources/middleware/body-parser.html

在express的实例化下面添加此代码块

代码语言:javascript
运行
复制
const bodyParser = require('body-parser')
app.use(bodyParser.json())
票数 1
EN

Stack Overflow用户

发布于 2021-09-06 11:39:53

您可以简单地这样做:

代码语言:javascript
运行
复制
let index = +req.params.id;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69073695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档