web-dev-qa-db-ja.com

res.redirect( 'back')パラメーター付き

私のウェブサイトのすべてのページに登録フォームがあります。登録中にエラーが発生する場合があります。エラーをキャッチした後、ユーザーを前のページに戻して、エラーメッセージを表示する必要があります。問題は、ユーザーがどのページから登録を実行したかわからないため、res.redirect('back');を使用することです。ただし、ユーザーを単にリダイレクトすることはできません。エラーメッセージも表示する必要があるため、引数を渡す必要があります。ただし、res.redirect('back', (reg_error:'username')})はパラメーターをサポートしていないため、res.redirect()を直接使用することはできません。いくつかのパラメータを使用して前のページをレンダリングするにはどうすればよいですか?

42
f1nn

リファラーヘッダーを使用して、ユーザーがどのページからアクセスしたかを確認すると役立つ場合があります。

_app.get('/mobileon', function(req, res){
  backURL=req.header('Referer') || '/';
  // do your thang
  res.redirect(backURL);
});
_

また、backURLをreq.sessionに保存することもできます(複数のルートにまたがって保持する必要がある場合)。次のような変数の存在をテストすることを忘れないでください:res.redirect(req.session.backURL || '/')


edit:私の答えは賛成票を獲得しているので、これを行うための現在の方法を打ち込んだ。少し長くなったので、 https://Gist.github.com/therealplato/7997908 で表示できます。

最も重要な違いは、リファラーURLをオーバーライドするクエリ文字列で明示的な「バウンス」パラメーターを使用することです。

40
Plato

これを実装する非常に簡単な方法は、 connect-flash を使用することです。これは、エクスプレスに組み込まれたセッションミドルウェアを活用して「フラッシュ」メッセージを次のリクエストに渡すエクスプレス用ミドルウェアです。

これは、ビューのURLまたはメッセージをフォームまたはルートパターンに追跡するためにフィールドを追加する必要がないことを意味します。

Ruby on Rails と同じ機能の簡単なバージョンを提供します。

(明らかに、これを使用するには Express framework を使用する必要がありますが、それも強くお勧めします!)

次のように接続します。

var flash = require('connect-flash');
var app = express();

app.configure(function() {
  app.use(express.cookieParser('keyboard cat'));
  app.use(express.session({ cookie: { maxAge: 60000 }}));
  app.use(flash());
});

そして、次のように使用します:

app.get('/flash', function(req, res){
  req.flash('info', 'Flashed message')
  res.redirect('/');
});

app.get('/', function(req, res){
  res.render('index', { message: req.flash('info') });
});
27
Jed Watson

セッションを使用している場合は、reg_errorオブジェクトreq.sessionリダイレクト前のオブジェクト。その後、req.session前のページをロードするときのオブジェクト。

5
danmactough

単にres.redirect('..?error=1')としてリダイレクトすることができます

?タグは、ブラウザにオプションのパラメータのセットであり、..は単なるパス名の相対呼び出しです(cd ..ターミナルで1つのディレクトリに戻ります)、ブラウザはそのタグを最後に持つ適切なページに移動します:http://.....?error=1

次に、以下を実行することにより、適切なページでエラーをプルすることができます。

if (req.param("error" == 1)) { 
// do stuff bassed off that error match
};

いくつかの異なるエラー値をハードコーディングし、発生したエラーに応じて適切に応答させることができます

これにより、ユーザーが独自のパラメーターを入力してページに応答できるため、Webページが改ざんされやすくなるため、ユーザーが悪用したくないアクションではないことを確認してください。 (単純なエラー表示には問題ありません)

5
gadu