Is it possible to rewrite the URL path using node.js?(I'm also using Express 3.0)
I've tried something like this:
req.url = 'foo';
But the url continues the same
Sure, just add a middleware function to modify it. For example:
app.use(function(req, res, next) {
if (req.url.slice(-1) === '/') {
req.url = req.url.slice(0, -1);
}
next();
});
This function removes the trailing slash from all incoming request URLs. Note that in order for this to work, you will need to place it before the call to app.use(app.router).
Request instance defines the req property as not writable.req.path not req.url. req.url is a property of Http.IncomingMessage so it can be set. Your original answer was correct. My apologies!A good idea should be to update the path too. My method suggestions:
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();
});
By this way /not-wanted-route-part/users will became /users
you need override some properties of req (IncomingMessage in NodeJs):
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;
}