我正在尝试将 Express js 与 .ejs 视图一起使用。
我想在任何事件上将我的页面重定向到另一个页面,比如“onCancelEvent”
根据 Express js 文档,我可以使用 res.redirect("/home");
但我无法在我的 ejs 文件中获取 res 对象。
谁能告诉我如何访问 .ejs 文件中的 req 和 res 对象
请帮忙。
谢谢
我正在尝试将 Express js 与 .ejs 视图一起使用。
我想在任何事件上将我的页面重定向到另一个页面,比如“onCancelEvent”
根据 Express js 文档,我可以使用 res.redirect("/home");
但我无法在我的 ejs 文件中获取 res 对象。
谁能告诉我如何访问 .ejs 文件中的 req 和 res 对象
请帮忙。
谢谢
如果您想访问 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";
在我看来:你没有。
最好在调用之前创建确定需要在某些中间件中重定向的逻辑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);
}
}