我正在尝试将我网站上的所有GET
个请求(API请求除外)发送到控制器,该控制器会在显示该页面之前检查是否存在已登录的用户。否则,如果当前未登录,则会将用户发送到登录页面。
以下结构适用于除根路径('/'
)之外的所有内容。例如,如果我尝试将/admin
或/games
作为非登录用户点击,则会将其正确发送到登录页面。同样,如果我在每个页面中都签名正确显示(注意:我正在使用AngularJS客户端)。我遇到的一个问题是,当我点击我的根路径时,应用会尝试显示index.html
,而不会检查用户是否已登录。我很困惑为什么该路由的处理方式不同,为什么我的{似乎永远不会为此路线调用{1}}。我已经完成了一些“控制台日志记录”,并确认每个非API路由都会调用pagesController
,但pagesController.index
。
routes.js
'/'
pages.js
'use strict';
var controllers = require('./controllers');
var v1Router = require('./routes/api/v1');
var pagesController = controllers.pagesController;
module.exports = function(app) {
app.use('/api', v1Router);
app.get('/logout', function(req, res) {
req.logout();
res.redirect('/');
});
app.get(['*'],
pagesController.index
);
};
更新:我在客户端路由中将我的根目录从'use strict';
var path = require('path');
var index = function(req, res) {
if (req.user) {
res.sendFile(path.join(__dirname, '../assets', 'index.html'));
} else {
res.sendFile(path.join(__dirname, '../assets', 'signin.html'));
}
};
module.exports = {
index: index
};
更改为/
,一切正常。无论出于何种原因/a
未通过/
。
更新2:因此pagesController.index
中的这一行导致了问题:
app.js
删除该行app.use(express.static(path.join(__dirname, 'assets')));
已在pagesController.index
上正确调用,但我的静态资源都没有提供,因此只需删除该行就无法解决问题。如何在忽略/
的情况下正确提供静态资产?
答案 0 :(得分:1)
您还可以在条件语句中处理路线:
'use strict';
var path = require('path');
var index = function(req, res) {
if (req.user) {
res.sendFile(path.join(__dirname, '../assets', 'index.html'));
} if (req.url === '/') {
** Handle Case Here **
}
else {
res.sendFile(path.join(__dirname, '../assets', 'signin.html'));
}
};
module.exports = {
index: index
};
好的,我做了一些研究:这里有一篇很棒的文章和可能的解决方案:(不确定它是否适合您的使用案例)
http://evanhahn.com/express-dot-static-deep-dive/
app.use(express.static(myStaticPath, {
index: ['jokes.txt', 'index.html']
})
您可以简单地提供一个文件数组作为索引,如果找到第一个文件,如果没有,则提供第二个文件,依此类推。