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
相关产品推荐
相关产品推荐

