手动打电话给快递

时间:2017-03-07 21:03:58

标签: node.js express socket.io

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

1 个答案:

答案 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();

这一点并不明显,需要花费大量的实验才能让它发挥作用。