[解決済み] Expressjsで、あるコンテキストを渡しながらリダイレクトするには?
質問
node.jsでWebアプリを作るためにexpressを使用しています。これは、私が持っているものを単純化したものです。
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
が有効でない場合、追加のコンテキストを
/
ページがあります。どうすればよいのでしょうか?リダイレクトでは、何らかの追加パラメータを許可していないようです。
どうすればいいですか?
異なるルートにデータを渡すには、いくつかの方法があります。 最も正しい答えは、もちろんクエリ文字列です。 その際、値がきちんと エンコードURIComponent と decodeURIComponent .
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でこれを行うには、別のライブラリを使用する必要があります。 基本的には、変数を設定することで、その変数が表示され、次にページにアクセスしたときにリセットされるようになります。 ユーザーにエラーを表示するのに便利なのですが、やはりデフォルトでは削除されています。 EDIT
この機能を追加するライブラリを見つけました。
Express アプリケーションで情報をやり取りする方法について、一般的なアイデアを得ることができるかと思います。
関連
-
[解決済み】MongoClient v3.0使用時、db.collectionは関数ではない
-
[解決済み】MongoDBでコレクションを日付で並べ替えるには?
-
[解決済み】ブロックスコープの宣言は、ストリクトモード以外ではまだサポートされていません。
-
[解決済み】MongooseでEnumを作成し使用する方法
-
webpack ENOENTソリューションの起動
-
[解決済み] joiライブラリを使用して2つの時間を比較する方法
-
[解決済み] TypeErrorです。リクエストパスにエスケープされていない文字が含まれています。
-
[解決済み] Yarn にパッケージを強制的に再インストールさせるにはどうしたらいいですか?
-
[解決済み] エラーです。Expressでビューの検索に失敗しました
-
[解決済み] ExpressJS アプリケーションをどのように構成するか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】AWS Lambdaでnodejsの「ref」モジュールを使用すると「invalid ELF header」と表示される件
-
[解決済み】ENOENT, そのようなファイルまたはディレクトリがありません。
-
[解決済み】AWS lambda function エラー - モジュール 'index' をインポートできません。エラー
-
[解決済み] Npmエラー - Windows NT - 解決方法
-
[解決済み] Json Web Token verify() return jwt malformed
-
[解決済み] node.jsのセットアップウィザードが途中で終了してしまう
-
[解決済み] バルク更新を行う。
-
[解決済み] node.js - リクエスト - "emitter.setMaxListeners() "はどのように?
-
[解決済み] npm not able to find a fileに関連するエラーは何が原因でしょうか?node_modules サブフォルダ内にコンテンツがありません。なぜでしょうか?