Node.js如何修改端点以处理urlencoded格式的表单请求参数?
问题:Express端点无法处理x-www-form-urlencoded格式请求
我在Stack Overflow上看过不少类似问题,已经加了body-parser,但还是没解决问题。我的端点及依赖代码如下:
const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use(express.urlencoded({ extended: false })); app.use(express.json()); app.post('/auth/refresh/:refreshtoken', async (req, res) => { // 验证refreshToken的逻辑... });
当前这个端点能正常处理把refreshToken作为URL路径参数的请求,对应的客户端请求代码:
@POST("/auth/refresh/{refreshtoken}") suspend fun refresh(@Path("refreshtoken") refreshtoken: String): AuthResponse<TokenDto>
但我需要让它处理包含x-www-form-urlencoded格式字段的请求,现在这类请求返回“404 not found”错误,对应的客户端请求代码:
@FormUrlEncoded @POST("/auth/refresh") suspend fun refresh(@Field("refreshtoken") refreshToken: String): AuthResponse<TokenDto>
请问需要对Node.js端点做哪些修改?
解决方案
- 修改端点路径:把原来的
/auth/refresh/:refreshtoken改成/auth/refresh——新请求是POST到不带路径参数的地址,原路径带参数会导致请求匹配失败,返回404。 - 从请求体获取参数:表单编码格式的参数存在请求体中,用
req.body.refreshtoken替代原来的req.params.refreshtoken来获取值。 - 清理重复解析中间件:Express 4.16及以上版本已内置
express.urlencoded和express.json,功能和body-parser完全一致,可删除body-parser的引入及相关中间件,避免重复配置。
修改后的完整代码示例:
const express = require('express'); const app = express(); // 仅保留Express内置的解析中间件 app.use(express.urlencoded({ extended: false })); app.use(express.json()); // 更新端点路径为不带参数的/auth/refresh app.post('/auth/refresh', async (req, res) => { // 从请求体中获取refreshtoken const refreshToken = req.body.refreshtoken; // 执行你的refreshToken验证逻辑... // 示例响应 res.json({ status: 'success', token: 'new-access-token' }); });
内容的提问来源于stack exchange,提问作者Alex Rodionow
相关产品推荐
相关产品推荐

