2017-03-07 95 views
-1

node.js/express/socket.io应用程序中,如何手动调用express来加载/呈现主页,而不用说app.use(blah)。换句话说,如果我想要通过手动加载index.html而不是自动加载。手动呼叫

var express = require('express'), 
    app = express(), 
    ... 

//app.use magically loads index.html when the browser hits 8080 
app.use(express.static(path.join(__dirname, '../client/www'))); //index.html is in www 
var port = process.env.PORT || 8080; //select your port or let it pull from your .env file 
//===============PORT================= 
http.listen(port, function() { 
    console.log('listening on: ' + port); 
} 

其中index.html位于www?这不起作用:

app.get('/', function(req, res){ 
    res.sendfile('index.html', { root: __dirname + "/relative_path_of_file" }); 
}); 

这也不:

app.get('/', function(req, res){ 
    res.render('/home/idf/Documents/js/react-trader/client/www/index.html', {user: req.user}); 
}); 

回答

0

我是能够解决的这个问题的原因的问题。我正在使用Passport来验证Express。我需要保护主页(index.html),所以我添加了一个路由并确保用户必须经过身份验证才能查看该页面。于是我说:

app.get('/index.html', ensureAuthenticated, function(req, res){ 
    ... 
} 

的问题是,如果我这样做,当用户进行身份验证,我无法弄清楚如何控制传递给快递。我可以通过Passport路由进行身份验证(并阻止访问主页),或者我可以执行Express。但我不能这样做。

事实证明,答案是非常简单的(或至少在我在这一点上是非常有限的理解),我通过简单地重写到

app.get('/index.html', ensureAuthenticated, function(req, res, next){ 
    return next(); 
} 

本质工作,顺便打出来的Passport路线和传递控制到Express [或者“手动呼叫” - 因此我的问题]是return next();

这根本不明显,需要相当多的实验才能使其运行。