私のウェブサイトのすべてのページに登録フォームがあります。登録中にエラーが発生する場合があります。エラーをキャッチした後、ユーザーを前のページに戻して、エラーメッセージを表示する必要があります。問題は、ユーザーがどのページから登録を実行したかわからないため、res.redirect('back');
を使用することです。ただし、ユーザーを単にリダイレクトすることはできません。エラーメッセージも表示する必要があるため、引数を渡す必要があります。ただし、res.redirect('back', (reg_error:'username')})
はパラメーターをサポートしていないため、res.redirect()
を直接使用することはできません。いくつかのパラメータを使用して前のページをレンダリングするにはどうすればよいですか?
リファラーヘッダーを使用して、ユーザーがどのページからアクセスしたかを確認すると役立つ場合があります。
_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をオーバーライドするクエリ文字列で明示的な「バウンス」パラメーターを使用することです。
これを実装する非常に簡単な方法は、 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') });
});
セッションを使用している場合は、reg_error
オブジェクトreq.session
リダイレクト前のオブジェクト。その後、req.session
前のページをロードするときのオブジェクト。
単にres.redirect('..?error=1')
としてリダイレクトすることができます
?
タグは、ブラウザにオプションのパラメータのセットであり、..
は単なるパス名の相対呼び出しです(cd ..
ターミナルで1つのディレクトリに戻ります)、ブラウザはそのタグを最後に持つ適切なページに移動します:http://.....?error=1
次に、以下を実行することにより、適切なページでエラーをプルすることができます。
if (req.param("error" == 1)) {
// do stuff bassed off that error match
};
いくつかの異なるエラー値をハードコーディングし、発生したエラーに応じて適切に応答させることができます
これにより、ユーザーが独自のパラメーターを入力してページに応答できるため、Webページが改ざんされやすくなるため、ユーザーが悪用したくないアクションではないことを確認してください。 (単純なエラー表示には問題ありません)