44

ページへの取得を実行し、クエリ文字列にフィルターを追加するボタンがあります。私のコードはそのフィルターをグリッドに適用しますが、ユーザーはそのフィルターを削除/編集できます。?filter=blahグリッドに適用されたフィルタが表示されるので、ページが表示されたときにクエリ文字列からを削除したいと考えています。

ページと URL?filter=columnAで最初にどちらが正しいかが示されている場合、混乱する可能性がありますが、ユーザーはそのフィルターを削除して新しいものを適用しcolumnBますが、クエリ文字列はまだ?filter-columnA. グリッドは、ポストバックを必要とせずにフィルターの変更を処理できます。

どうやってやるの?また、クエリ文字列を削除/更新できない場合、それを解析して、クエリ文字列なしでメイン ページにリダイレクトすることは可能ですか? フィルタを var フィルタに保存したら、クエリ文字列で必要なくなりました。

ページを表示するコードは次のとおりです。

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
            }
    });

};
4

10 に答える 10

64

を使用url.parse()して、住所のコンポーネントを取得しますreq.url。クエリ文字列のない URL がpathnameプロパティに格納されます。

Express'redirectを使用して、新しいページ アドレスを送信します。

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

のノードドキュメントurl

于 2013-10-28T15:29:00.020 に答える
28

そのようなことをするためにモジュールを使用しないでください:

res.redirect( req.originalUrl.split("?").shift() );
于 2015-08-20T12:54:17.460 に答える
18

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

于 2016-08-09T22:36:12.687 に答える
6
// 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);

}
于 2016-04-16T17:32:55.863 に答える
4

req.urlあなたのケースには完全なURLが保存されています.node.jsのurl.parse()を使用して部分を引き出します。res.set()パスを取得し、クエリ文字列なしで URL にリダイレクトするために Location ヘッダーを使用して送信します。

var url = require('url');
res.set('Location', url.parse(req.url).pathname);
于 2013-01-05T00:19:21.823 に答える