【问题标题】:Render jade template from middleware in node.js with express使用 express 从 node.js 中的中间件渲染玉模板
【发布时间】:2013-10-05 09:27:39
【问题描述】:

我不想检查每个控制器,而是使用app.all('*') 来检查用户是否经过身份验证并且它已经运行良好。如果用户已登录,我只是调用next(),如果他没有,我将调用另一个路由来显示登录页面。

到目前为止一切顺利,但似乎从该中间件回调函数进行渲染会以某种方式弄乱我的路径,例如样式表不起作用,当我在页面源中单击它时,我再次登陆索引页面。

总而言之,这有效并显示了我的风格:

app.get('/', function (req, res) {
    res.render('index', { title: 'Account Page' });
});

虽然这部分工作,但它只显示没有样式表中的样式的 HTML:

app.all('*', function (req, res) {
    app.set('loggedIn', controller.security.authenticationAction(req));

    if (app.get('loggedIn')) next(); // go on with '/' route
    else res.render('index', { title: 'Index Page' });
});

这也显示了相同的 HTML 页面(虽然有另一个标题),但没有样式。 这是我在 app.js 中的默认配置:

app.all('*', function (req, res) { ... });

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.cookieParser('keykeykey'));

救命!

【问题讨论】:

    标签: node.js express pug


    【解决方案1】:

    您的样式表(可能)由express.static 提供服务,它在您的app.all() 路由之后声明(使用Express,每当您第一次声明路由时,路由器中间件就被插入到中间件链中;然后;其实大部分时候用app.use(app.router)是没用的,因为Express已经在后台插入了)。

    因为请求是由中间件按照声明的顺序处理的,所以您的app.all 也可以处理对静态资源的请求。尝试将静态中间件移动到您的 app.all 之前:

    app.use(express.static(path.join(__dirname, 'public')));
    app.all('*', function (req, res) { ... });
    

    顺便说一句,express.favicon() 可能会出现类似的问题,如果您想使用express.bodyParserexpress.cookieParser 等提供的任何服务,同样适用)。

    【讨论】:

    • 谢谢兄弟!我对表达还是很陌生,因为那个 express-skeleton builder 生成了所有我没有时间特别检查每一行的东西。
    猜你喜欢
    • 2016-12-28
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多