在node.js/express/socket.io
应用程序中,如何在不说express
的情况下手动“调用”app.use(blah)
来加载/呈现主页。换句话说,如果我想告诉express要手动加载index.html
而不是自动加载。{/ p>
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 :(得分:0)
我能够解决导致这个问题的问题。我正在使用Passport
来验证Express
。我需要保护主页(index.html),所以我添加了一个路由,并确保用户必须通过身份验证才能查看该页面。所以我说:
app.get('/index.html', ensureAuthenticated, function(req, res){
...
}
问题在于,如果我这样做,当用户进行身份验证时,我无法弄清楚如何将控制传递给Express。我可以通过Passport
路由进行身份验证(并阻止访问主页),或者我可以执行Express
。但我无法做到这两点。
事实证明答案非常简单(或者至少在我现在非常有限的理解中)我只需要重写就可以了。
app.get('/index.html', ensureAuthenticated, function(req, res, next){
return next();
}
从本质上讲,打破Passport
路线并将控制传递给Express [或者#34;手动调用" - 因此我的问题是return next();
这一点并不明显,需要花费大量的实验才能让它发挥作用。