使用express从node.js中的中间件呈现jade模板

使用express从node.js中的中间件呈现jade模板,node.js,express,pug,Node.js,Express,Pug,我想使用app.all('*')来检查用户是否经过身份验证,并且它是否已经运行良好,而不是检查每个控制器。如果用户已登录,我只调用next(),如果用户未登录,我将调用另一个路由以显示登录页面 到目前为止还不错,但从中间件回调函数进行的渲染似乎会在某种程度上打乱我的路径,例如样式表不工作,当我在页面源中单击它时,我再次进入索引页面 总而言之,这可以工作并显示我的样式: app.get('/', function (req, res) { res.render('index', { tit

我想使用
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'));
救命啊

您的样式表(可能)由
express.static
提供服务,它在您的
app.all()
route之后声明(对于express,每当您第一次声明路由时,路由器中间件都会插入到中间件链中;事实上,使用
app.use(app.router)
在大多数情况下都是无用的,因为Express已经在幕后插入了它)

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

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

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

谢谢兄弟!我还是个新手,因为express骨架生成器生成了所有这些东西,所以我没有时间检查每一行。