javascript - 正确使用 Express 的 res.render() 和 res.redirect()

标签 javascript node.js express render

我正在使用 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/

相关文章:

javascript - Express 中来自 React 子组件的 POST 请求

javascript - JQUERY 对话框句柄回发

javascript - DipleJS - 如何制作图表动画并下载图表

javascript - NodeJS 未处理的 promise 拒绝问题

javascript - npm 库/框架下载量大幅下降。有人知道为什么吗?

javascript - Express.js : regex in route

javascript - 确认消息未显示在 JavaScript 联系表单上

javascript - Facebook Messenger 机器人 : Understanding Export Arguments

node.js - 为什么 Node.js Express 框架在设置 session 变量时不使用回调?

node.js - wrapAsync(...) 不是 MongoDB 和 Mongoose 中的函数