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/