2015-10-17 32 views
1

我正试图将我网站上的所有GET请求(API请求除外)发送给控制器,该控制器在显示页面之前检查登录用户的存在。否则,如果当前未登录,则用户将被发送到登录页面。快速似乎忽略根路由的控制器

下面的结构适用于除根路线以外的任何事情('/')。例如,如果我尝试将/admin/games作为非登录用户登录,我会将其正确发送到登录页面。同样,如果我在每个页面上签名显示正确(注意:我正在使用AngularJS客户端)。我遇到的一个问题是,当我点击根路线时,应用程序尝试显示index.html,而未检查用户是否登录。我很困惑,为什么该路线的处理方式不同,以及为什么我的pagesController似乎从未调用过为这条路线。我已经做了一些'控制台日志记录',并确认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在我的客户端路由,一切完美的作品。无论出于何种原因,/未通过pagesController.index运行。随着该行删除pagesController.index正常呼吁/

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

,但是没有我的静态资产的供应,从而简单地删除该行的作用:

更新2:所以这行我app.js造成问题没有解决它。如何正确提供我的静态资产,而忽略index.html

+0

哪个版本的快递? –

+0

@ChrisL Express 4.12.4 – MattDionis

+0

你在任何地方都有“/”路线吗?尝试把app.get('/',function(req,res){...});在全线路线上方? –

回答

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'] 
}) 

你可以简单地给文件的数组作为索引,如果第一个被发现的,它是服务,如果没有,二是服务,等等。