You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExpressJS+NodeJS使用PUT请求更新用户name属性获undefined值求助

Express PUT接口更新字段为undefined&Postman无响应问题修复

核心问题1:PUT接口未返回响应

你写的PUT路由逻辑仅执行了字段赋值操作,没有调用res.send()/res.json()返回响应,导致请求一直处于挂起状态,这就是Postman一直加载的原因。

核心问题2:参数传递与取值不匹配

你把name参数填在了Postman的Params栏,这部分参数会被解析到req.query对象,而你代码里取值用的是req.body.name,自然取不到值返回undefined。
正确传参方式:

  • Postman中切换到Body栏,选择raw格式,右侧下拉选JSON,填入请求体:
{"name":"newSally"}
  • 确认你的Express服务已经配置JSON解析中间件(Express 4.16+版本内置,无需单独安装body-parser),在主入口文件或当前路由文件顶部添加对应的中间件注册逻辑即可。

核心问题3:代码变量未定义

你PUT路由里写的users[id].name中的id没有声明,直接使用会报错。你已经通过router.param把对应id的用户挂载到了req.user上,直接修改req.user.name即可,引用类型修改会同步更新原users数组。

其他冗余错误修复

你现在的morgan日志中间件注册方式错误,嵌套在自定义中间件里会导致每次请求都重复注册morgan,直接把注册逻辑提到外层即可。


修正后完整代码

const express = require('express')
const router = express.Router()
const morgan = require('morgan')

// 注册中间件
router.use(morgan('dev'))
// 注册JSON解析中间件,必须放在路由定义前
router.use(express.json())

const users =[{name:"Kyle", familyName:"Horton", age:20}, {name:"Sally", familyName:"Myers", age:22}]

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) => {
    // 直接修改挂载的user对象即可
    req.user.name = req.body.name
    // 必须返回响应
    res.json({
        code: 0,
        msg: '更新成功',
        data: req.user
    })
})
.delete((req, res) => {
    res.send(`Deleting user with the ID: ${req.params.id}`)
})

router.param("id", (req, res, next, id) => {
    req.user = users[id]
    next()
})

module.exports = router

内容的提问来源于stack exchange,提问作者Mistful

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:51:01