我正在使用 res.redirect('page.ejs');
并且在我的浏览器上收到消息:
Cannot GET /page.ejs
我还没有在我的路由文件中以以下方式声明这一点:
app.get('/page', function(req, res) {
res.render('page.ejs');
});
是否应该包含此内容才能使 res.redirect()
正常工作?
当我不使用 res.redirect()
而是使用 res.render()
时,即使我没有 app.get()
代码,它仍然可以工作。
最佳答案
为了理解这一点,让我们看看这些方法的作用。
res.redirect('page.ejs');
// or, more correctly, you're redirecting to an *endpoint*
// (not a page. the endpoint will render a *page*) so it should be:
res.redirect('/page');
这将告诉express将您的请求重定向到GET/page.ejs
端点。端点是您上面描述的快速方法:
app.get('/page', function(req, res) {
res.render('page.ejs');
});
由于您没有定义该端点,因此它将无法工作。如果您确实定义了它,它将执行该函数,并且 res.render('page.ejs')
行将运行,这将返回 page.ejs
文件。您可以返回任何您想要的内容,它可以是 someOtherPage.ejs
或者您甚至可以返回 json res.json({ message: 'hi' });
res.render('page.ejs');
这只会使用 page.ejs
模板响应客户端(前端/js/无论您想如何调用它),它不需要知道其他端点是否存在,它会返回 page.ejs
模板本身。
所以,这真的取决于你想根据场景使用什么。有时,一个端点无法处理该请求,因此会将请求推迟到另一个端点,理论上,该端点知道如何处理该请求。在这种情况下,将使用redirect
。
希望这是有道理的并澄清您的困惑
(我不是 Express 内部工作原理的专家,但这是对其正在做什么的高级想法)
关于javascript - 正确使用 Express 的 res.render() 和 res.redirect(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52063162/