Node.js里怎么正确处理RESTful API的PUT请求参数?

曦月(打工版) 阅读 6

我用Express写了个RESTful接口,GET和POST都好好的,但PUT请求拿不到前端传的参数,req.body一直是空对象。

我已经加了app.use(express.json())中间件,POST请求能正常解析JSON,但PUT就是不行,是不是还要额外配置什么?

前端发请求的代码是这样的:

fetch('/api/users/123', {
  method: 'PUT',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: 'Alice', email: 'alice@example.com' })
})
我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
Code°付楠
这个问题挺常见的,我先说最可能的原因:中间件顺序。

你检查一下 app.use(express.json()) 是否放在所有路由定义之前。Express中间件是按顺序执行的,如果路由写在前面,请求就直接命中路由了,根本不会走到json解析中间件。

正确的写法应该是这样:

const express = require('express');
const app = express();

// 这两个必须放在路由前面
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 然后才是路由
app.put('/api/users/:id', (req, res) => {
console.log(req.body); // 这里应该能拿到了
console.log(req.params.id); // 123
res.json({ success: true });
});

app.listen(3000);


如果顺序没问题,那可能是另一个坑:fetch请求的跨域问题。如果你前端和后端不在同一个端口,记得加cors中间件:

const cors = require('cors');
app.use(cors());


还有一种情况是某些旧版Express对fetch PUT请求处理有问题,可以试试在fetch里明确指定 method: 'PUT',你代码里已经有了,所以应该不是这个问题。

你先把中间件顺序调一下,大概率能解决。
点赞 1
2026-03-11 09:03