コンテキストを渡しながら ExpressJS でリダイレクトするにはどうすればよいですか? 質問する

コンテキストを渡しながら ExpressJS でリダイレクトするにはどうすればよいですか? 質問する

私は Express を使用して node.js で Web アプリを作成しています。これは私が持っているものを簡略化したものです:

var express = require('express');
var jade = require('jade');
var http = require("http");


var app = express();
var server = http.createServer(app);

app.get('/', function(req, res) {
    // Prepare the context
    res.render('home.jade', context);
});

app.post('/category', function(req, res) {
    // Process the data received in req.body
    res.redirect('/');
});

私の問題は次のとおりです:

送信されたデータが/category検証されない場合、/ページに追加のコンテキストを渡したいと思います。どうすればいいでしょうか? リダイレクトでは、いかなる種類の追加パラメータも許可されないようです。

ベストアンサー1

データを異なるルートに渡す方法はいくつかあります。最も正しい答えは、もちろんクエリ文字列です。値が適切に設定されていることを確認する必要があります。エンコードURIコンポーネントそしてデコードURIコンポーネント

app.get('/category', function(req, res) {
  var string = encodeURIComponent('something that would break');
  res.redirect('/?valid=' + string);
});

を使用してパラメータを送信することで、他のルートでそれを取得できますreq.query

app.get('/', function(req, res) {
  var passedVariable = req.query.valid;
  // Do something with variable
});

よりダイナミックな方法としては、urlクエリ文字列を生成するコアモジュール:

const url = require('url');    
app.get('/category', function(req, res) {
    res.redirect(url.format({
       pathname:"/",
       query: {
          "a": 1,
          "b": 2,
          "valid":"your string here"
        }
     }));
 });

したがって、すべてのreqクエリ文字列変数をリダイレクトしたい場合は、次のようにするだけです。

res.redirect(url.format({
       pathname:"/",
       query:req.query,
     });
 });

また、Node >= 7.xを使用している場合は、querystringコアモジュール

const querystring = require('querystring');    
app.get('/category', function(req, res) {
      const query = querystring.stringify({
          "a": 1,
          "b": 2,
          "valid":"your string here"
      });
      res.redirect('/?' + query);
 });

別の方法としては、セッションで何かを設定することです。設定方法についてはこちらをご覧くださいただし、変数を設定してアクセスするには、次のようになります。

app.get('/category', function(req, res) {
  req.session.valid = true;
  res.redirect('/');
});

そしてリダイレクト後には...

app.get('/', function(req, res) {
  var passedVariable = req.session.valid;
  req.session.valid = null; // resets session variable
  // Do something
});

Express の古い機能を使用するオプションもありますreq.flash。Express の新しいバージョンでこれを行うには、別のライブラリを使用する必要があります。基本的に、次回ページにアクセスしたときに表示およびリセットされる変数を設定できます。ユーザーにエラーを表示するのに便利ですが、これもデフォルトで削除されています。編集:この機能を追加するライブラリを見つけました。

これで、Express アプリケーションで情報を渡す方法について、大まかな概要がわかったと思います。

おすすめ記事