ウェブサイトのすべてのページに登録フォームがあります。登録中にエラーが発生する場合があります。エラーをキャッチした後、ユーザーを前のページに戻して、エラーメッセージを表示する必要があります。問題は、ユーザーがどのページから登録を行ったかわからないため、を使用することres.redirect('back');
です。ただし、ユーザーをリダイレクトするだけではなく、エラーメッセージも表示する必要があるため、引数を渡す必要があります。ただし、パラメータをサポートしていないres.redirect('back', (reg_error:'username')})
ため、直接使用することはできません。res.redirect()
いくつかのパラメータを使用して前のページをレンダリングするにはどうすればよいですか?
7 に答える
リファラーヘッダーを使用して、ユーザーがどのページから来たかを見つけると役立つ場合があります。
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」パラメーターを使用することです。
これを実装する非常に簡単な方法は、「フラッシュ」メッセージを次のリクエストに渡すために 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') });
});
セッションを使用している場合は、リダイレクトする前にそのreg_error
オブジェクトをオブジェクトに追加するだけです。req.session
その後req.session
、前のページをロードするときにオブジェクトで使用できるようになります。
connect-flash パッケージを使用して、エラーまたは成功のメッセージを送信できます。
フォームに page パラメータを追加する必要があります。次に、サーバーでそれを読み取り、リダイレクトに使用できます。
res.redirect(page, {reg_error:'username'}) // page being the url to redirect to.