8

.ejs ビューで Express js を使用しようとしています。

「onCancelEvent」と言うイベントで自分のページを別のページにリダイレクトしたい

Express js のドキュメントに従って、res.redirect("/home"); を使用してこれを行うことができます。

しかし、ejs ファイルで res オブジェクトを取得できません。

誰でも.ejsファイルのreqおよびresオブジェクトにアクセスする方法を教えてください

助けてください。

ありがとう

4

2 に答える 2

12

簡潔な答え

EJS テンプレートの「req/res」にアクセスする場合は、req/res オブジェクトをコントローラー関数 (この要求に固有のミドルウェア) で res.render() に渡すことができます。

res.render(viewName, { req : req, res : res /* other models */};

または、すべてのリクエスト (これを含む) を処理するミドルウェアで res.locals を設定します。

res.locals.req = req;
res.locals.res = res;

次に、EJS で「req/res」にアクセスできるようになります。

<% res.redirect("http://www.stackoverflow.com"); %>

さらなる議論

しかし、本当にビュー テンプレートで res を使用してリダイレクトしますか?

イベントがサーバー側への要求を開始する場合、ビューの前にコントローラーを通過する必要があります。そのため、コントローラー内で状態を検出してリダイレクトを送信できる必要があります。

イベントがクライアント側 (ブラウザ側) でのみ発生し、リクエストをサーバーに送信しない場合、リダイレクトはクライアント側の JavaScript によって実行できます。

window.location = "http://www.stackoverflow.com";
于 2013-01-17T11:13:45.120 に答える
1

私の意見では、そうではありません。

呼び出すずっと前に発生するミドルウェア内でリダイレクトする必要があるかどうかを判断するロジックを作成することをお勧めしますres.render()

EJS ファイルにはできるだけ少ないロジックを含める必要があるというのが私の主張です。ループと条件は、制限されている限り問題ありません。ただし、他のすべてのロジックはミドルウェアに配置する必要があります。

function myFn( req, res, next) {
  // Redirect if something has happened
  if (something) {
    res.redirect('someurl');
  }
  // Otherwise move on to the next middleware
  next();
}

または:

function myFn( req, res, next) {
  var options = {
    // Fill this in with your needed options
  };

  // Redirect if something has happened
  if (something) {
    res.redirect('someurl');
  } else {
    // Otherwise render the page
    res.render('myPage', options);
  }
}
于 2016-04-27T23:09:49.293 に答える