如何在.ejs文件中获取Expreejs的req和res对象

时间:2013-01-17 07:06:07

标签: node.js titanium-mobile express ejs

我正在尝试使用带有.ejs视图的Express js。

我想将我的页面重定向到任何事件的另一个页面,让我们说“onCancelEvent”

根据Express js文档,我可以使用res.redirect(“/ home”)执行此操作;

但是我无法在我的ejs文件中获得res对象。

任何人都可以告诉我如何在.ejs文件中访问req和res对象

请帮忙。

由于

2 个答案:

答案 0 :(得分:11)

简答

如果要访问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";

答案 1 :(得分: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');
  }

  // Otherwise render the page
  res.render('myPage', options);
}