我正在尝试使用带有.ejs视图的Express js。
我想将我的页面重定向到任何事件的另一个页面,让我们说“onCancelEvent”
根据Express js文档,我可以使用res.redirect(“/ home”)执行此操作;
但是我无法在我的ejs文件中获得res对象。
任何人都可以告诉我如何在.ejs文件中访问req和res对象
请帮忙。
由于
答案 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);
}