Node.js中如何将URL问号查询参数转为斜道路径实现参数掩码
实现方案
你可以通过Express的命名路由参数功能实现路径参数替换查询参数的需求,修改后代码如下:
const http = require("http"); const express = require("express"); const socketio = require("socket.io"); const path = require("path"); const fs = require("fs"); const app = express(); const httpserver = http.Server(app); const io = socketio(httpserver); const gamedirectory = path.join(__dirname, "public"); // 新增动态路由:匹配/v/开头的路径,提取后面的ID参数 app.get('/v/:id', (req, res) => { // 方案一:兼容原有前端逻辑,自动跳转至原格式地址,无需修改前端代码 res.redirect(`/v/?id=${req.params.id}`); // 方案二:保持地址栏为/v/1的美观格式,需要同步调整前端ID提取逻辑 // res.sendFile(path.join(gamedirectory, 'v', 'index.html')); }) // 静态资源中间件放在路由之后,避免拦截动态请求 app.use(express.static(gamedirectory)); console.log(gamedirectory) httpserver.listen(3000);
方案说明
- 方案一实现成本最低,不需要调整原有前端的参数读取逻辑,用户访问
/v/1时会自动跳转至原有的/v/?id=1地址。 - 选择方案二的话,地址栏会始终保持掩码后的格式,需要把前端原来读取查询参数的逻辑:
替换为从路径中提取ID的逻辑:// 原有前端代码 const id = new URLSearchParams(location.search).get('id')// 新前端代码 const id = location.pathname.split('/v/')[1]
两种方案都兼容原有带查询参数的旧链接格式,不需要额外做适配。
内容的提问来源于stack exchange,提问作者Manu G
相关产品推荐
相关产品推荐

