Express似乎忽略了根路由的控制器

我试图发送我的网站上的所有GET请求(API请求除外)到一个控制器,在显示页面之前检查login用户的存在。 否则,如果当前未login,用户将被发送到login页面。

下面的结构完全适用于除根路由( '/' )之外的所有内容。 例如,如果我尝试将/admin/games作为非login用户login,则会正确发送到login页面。 同样,如果我在每个页面上签名显示正确(注意:我正在使用AngularJS客户端)。 我有一个问题是,当我打我的根路线的应用程序试图显示index.html而不检查用户是否login。我很困惑,为什么这个路线处理不同,为什么我的pagesController是看似从来没有为这条路线调用。 我已经做了一些“控制台日志logging”,并确认pagesController.index是为每个非API路由调用,但是'/'

routes.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 ); }; 

pages.js

 '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我的客户端路由根//到一切完美的作品。 不pipe出于什么原因/不通过pagesController.index运行。

更新2:所以在我的app.js这行是造成这个问题:

 app.use(express.static(path.join(__dirname, 'assets'))); 

用这行删除pagesController.index正确调用/ ,但是我的静态资产都没有服务,所以只是删除该行不能解决它。 我怎样才能正确地服务我的静态资产,而忽略index.html

您也可以在条件语句中处理路由:

 '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 }; 

好的,我做了一些研究:这里有一篇很好的文章和可能的解决scheme:(不确定它是否适合您的用例)

http://evanhahn.com/express-dot-static-deep-dive/

 app.use(express.static(myStaticPath, { index: ['jokes.txt', 'index.html'] }) 

你可以简单地给一组文件作为索引,如果第一个被发现它被服务,如果没有,第二个被服务,依此类推。