node.js与明确如何从url中删除查询string

我有一个button,执行到我的网页,并添加一个filter的查询string。 我的代码将filter应用于网格…但用户可以删除/编辑该filter。 由于他们可以看到在网格中应用了哪个filter,因此我想在显示页面时从查询string中删除?filter = blah。 (如果在页面上并且URL说明了,可能会引起混淆?filter = columnA最初是正确的,但是用户移除该filter并在columnB上应用新的filter….但是查询string仍然会显示?filter-columnA。网格可以处理改变filter,而不需要回发。)我该怎么做? 如果你不能删除/更新一个查询string,是否有可能parsing它,然后只是redirect到主页面没有查询string? 一旦我把filter保存到varfilter,我不再需要它在查询string。

这里是显示页面的代码

exports.show = function(req, res) { var filter = req.query.filter; if (filter === null || filter === "") { filter = "n/a"; } res.render("somepage.jade", { locals: { title: "somepage", filter: filter } }); }; 

使用url.parse()来获取你的地址的组件,这是req.url 。 没有查询string的URL存储在pathname属性中。

使用快递' redirect发送新的页面地址。

 const url = require('url'); // built-in utility res.redirect(url.parse(req.url).pathname); 

url 节点文档。

不要使用模块做这样的事情:

 res.redirect( req.originalUrl.split("?").shift() ); 

Express 4.x +回答:
res.redirect(req.path)

完整的URL存储在req.url你的情况,使用node.js的url.parse()来拉出部分。 采取path并使用res.set()发送一个位置标题,以redirect到URL而不使用查询string。

 var url = require('url'); res.set('Location', url.parse(req.url).pathname); 
 // load built-in utilities for URL resolution and parsing var url = require('url'); function removeQueryString(url){ // split url into distinct parts // (full list: https://nodejs.org/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost) var obj = url.parse(url); // remove the querystring obj.search = obj.query = ""; // reassemble the url return url.format(obj); } 

为了避免通过强制redirect来重新加载页面,我将以下内容添加到我的.ejs文件的<head>部分:

 <script type="text/javascript"> var uri = window.location.toString(); if (uri.indexOf("?") > 0) { var clean_uri = uri.substring(0, uri.indexOf("?")); window.history.replaceState({}, document.title, clean_uri); } </script> 

资料来源: http : //atodorov.org/blog/2013/01/28/remove-query-string-with-javascript-and-html5/