res.render('index.html',{layout:null})生成错误

时间:2013-06-07 22:41:41

标签: node.js

关注演示项目Here和博文Here

他正在使用我jade engine使用的don't want,而不是使用Angularjs模板和路由。

根文件夹

client > js (contain all js files)
       > views > partials > html files
       > index.html

在他的代码发生变化后,我坚持使用下面的代码

我无法发送适当的回复。

如果我使用res.render('index.html', {layout : null});而不是刷新页面时出错

错误:

Error: Cannot find module 'html'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)

如果我使用res.redirect('/')而不是刷新页面总是发送给我在app.js中定义的root(/)。

需要:即使刷新浏览器,我也想发送回复或不回复。

{
        path: '/*',
        httpMethod: 'GET',
        middleware: [function(req, res) {
           var role = userRoles.public, username = '';
        if(req.user) {
            role = req.user.role;
            username = req.user.username;
        }
        res.cookie('user', JSON.stringify({
            'username': username,
            'role': role
        }));
            //res.render('index.html', {layout : null});
            //res.redirect('/');

        }],
        accessLevel: accessLevels.public
    }

1 个答案:

答案 0 :(得分:2)

如果您没有使用后端模板语言(例如jade),那么您希望使用res.sendfile而不是res.render。 Render将查找与文件扩展名匹配的模板引擎(例如.jade),然后通过它运行该文件。在这种情况下,它假定必须有一个名为html的渲染引擎,但没有。 SendFile将简单地使用适当的标题传输文件。

编辑:

我仍然不能100%肯定你在问什么,但我认为你所说的是你希望你的通配符路由将人们重定向到主页如果他们没有登录,但是如果他们是,然后让其他路线接管。

如果是这种情况,您只需要检查/*路线的“中间件”功能。

而不是:

function(req, res) {
    res.redirect('/');
}

使用某种类型的条件逻辑:

function (req, res, next) {
    if (/* !req.cookie.something or whatever */)
        res.redirect('/');
    else
        next(); // continue on to the next applicable (matching) route handler
}

这样你就不会总是陷入重定向循环中。显然,如果需要,上述条件逻辑可以是异步的。

我仍然相信res.sendfile是你问题其他部分的正确答案,正如github成员也建议的那样。