2017-03-07 13 views
-1

node.js/express/socket.ioアプリケーションでは、app.use(blah)と言うことなく、ホームページをロード/レンダリングするために、手でexpressを呼び出す方法を教えてください。言い換えれば、もし私が急行に自動ではなく手でindex.htmlをロードすると言いたいのであれば。手でExpressを呼び出す

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

私はこの質問の原因となる問題を解決することができました。私はを使ってExpressを認証しています。ホームページ(index.html)を保護する必要があったため、ルートを追加して、そのページを表示するためにユーザーを認証する必要がありました。だから私は言った:

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

問題は、私はこれを行う場合、ユーザーは認証時に、私はExpressに制御を渡す方法を見つけ出すことができなかったということです。私はPassportルーティングを介して認証することができ(そしてホームページにアクセスすることを妨げる)か、Expressを行うことができます。しかし、私は両方をすることができませんでした。

それはPassportから抜け出すための方法、私は単に本質的に

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

に書き換えることで、動作するようになった答えは本当に簡単(あるいは、少なくともこの時点で私の非常に限られた理解に)ある判明私の質問]はreturn next();

にあります。これはまったく明らかではありませんし、動作させるにはかなりの実験が必要でした。

関連する問題