42

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

4

7 に答える 7

46

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

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

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


編集:私の答えはいくつかの賛成票を得ているので、これを行うための現在の方法を入力しました。少し長くなったので、https://gist.github.com/therealplato/7997908で表示できます。

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

于 2012-09-16T01:47:16.317 に答える
31

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

つまり、フォームに URL やメッセージを追跡するためのフィールドを追加したり、ビューのパターンをルーティングしたりする必要はありません。

これは、 Ruby on Rails で同じ機能の単純なバージョンを提供します。

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

次のようにプラグインします。

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') });
});
于 2012-10-28T05:21:35.853 に答える
5

セッションを使用している場合は、リダイレクトする前にそのreg_errorオブジェクトをオブジェクトに追加するだけです。req.sessionその後req.session、前のページをロードするときにオブジェクトで使用できるようになります。

于 2012-09-16T02:35:44.283 に答える
0

connect-flash パッケージを使用して、エラーまたは成功のメッセージを送信できます。

https://www.npmjs.com/package/connect-flash

于 2020-03-04T15:53:26.523 に答える
-17

フォームに page パラメータを追加する必要があります。次に、サーバーでそれを読み取り、リダイレクトに使用できます。

res.redirect(page, {reg_error:'username'}) // page being the url to redirect to.
于 2012-09-15T23:54:46.740 に答える