使用express从node.js中的中间件渲染玉模板

时间:2013-10-05 09:27:39

标签: node.js express pug

我没有检查每个控制器,而是使用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'));

帮助!

1 个答案:

答案 0 :(得分:0)

您的样式表(可能)由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等提供的任何服务,则同样适用。