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

时间:2018-08-28 17:10:44

标签: javascript node.js express render

我正在使用res.redirect('page.ejs');,并在浏览器中收到以下消息:

  

无法获取/page.ejs

我尚未在我的路线文件中以以下方式声明此内容:

app.get('/page', function(req, res) {
        res.render('page.ejs');
    });

为了使res.redirect()正常工作,是否应该包括这些内容?

当我不使用res.redirect()而是使用res.render()时,即使我没有app.get()代码,它仍然可以正常工作。

2 个答案:

答案 0 :(得分:3)

因此,为了理解这一点,让我们看一下这些方法中的每一个。

res.redirect('page.ejs');

这将告诉Express将您的请求重定向到GET /page.ejs端点。端点是您上面描述的express方法:

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内部工作的专家,但这是它在做什么的一个高级概念)

答案 1 :(得分:1)

您应该做res.redirect('/page')