是否可以使用 node.js 重写 URL 路径?(我也在使用 Express 3.0)
我试过这样的事情:
req.url = 'foo';
但网址继续相同
当然,只需添加一个中间件功能即可对其进行修改。例如:
app.use(function(req, res, next) {
if (req.url.slice(-1) === '/') {
req.url = req.url.slice(0, -1);
}
next();
});
此函数从所有传入请求 URL 中删除尾部斜杠。请注意,为了使其正常工作,您需要将其放在调用app.use(app.router)
.
一个好主意应该是更新path
。我的方法建议:
app.use(function(req, res, next) {
console.log("request", req.originalUrl);
const removeOnRoutes = '/not-wanted-route-part';
req.originalUrl = req.originalUrl.replace(removeOnRoutes,'');
req.path = req.path.replace(removeOnRoutes,'');
return next();
});
这样/not-wanted-route-part/users
就会变成/users
您需要覆盖 req 的一些属性(NodeJs 中的 IncomingMessage):
2
function changeUrl(req, url) {
const parsedUrl = new URL(url);
req.url = url;
req.originalUrl = url;
req.path = parsedUrl.pathname;
req.search = parsedUrl.search;
req._parsedUrl = parsedUrl;
const query = {};
for(const entry of parsedUrl.searchParams) {
query[entry[0]] = entry[1];
}
req.query = query;
}