2017-03-07 122 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();

這根本不明顯,需要相當多的實驗才能使其運行。