2016-10-13 1 views
0

は、私は、ユーザーが最初のログインページが表示されますserver.jsにexpressjs:server.jsに添付された別のファイルで認証機能を使用する方法は?

function checkAuth(req, res, next) { 
    if (!req.session.user_id) { 
     res.sendFile(__dirname + '/login.html'); 
    } else { 
     next(); 
    } 
} 
app.get('/', (req, res) => { 
    res.sendfile(__dirname + 'login.html'); 
}); 
app.post("/login", (req, res) => { 
    if (req.body.userID === 'a' && req.body.password === 'b') { 
     req.session.user_id = req.body.userID; 
     res.redirect('main'); 
    } else { 
     res.redirect('/'); 
    } 
}); 
app.get('/main', checkAuth, (req, res) => { 
    res.sendFile(__dirname + '/main.html'); 
}); 
app.get('/logout', (req, res) => { 
    delete req.session.user_id; 
    res.redirect('/'); 
}); 

require('./latestNews.js')(app); 
require('./featuredNews.js')(app); 

app.get('*', (req, res) => { 
    res.sendFile(__dirname + '/404.html'); 
}); 
app.listen(port,() => { 
    console.log("listening on " + port); 
}); 

を以下のコードを持っていることを想像してみてください。彼がログインすると、彼はメインページを見ることができます。機能checkAuthは、「/メイン」(app.getで使用されている...これを達成するために。

私は2つの他のファイルのlatestNews.jsとfeaturedNews.jsを取り付けた。これらのapp.getも含み、アプリ...、.post機能と次のようになります。

module.exports = function(app){ 
    app.get("/latestNews", (req, res) => { 
     res.sendFile(__dirname + '/latestNews.html'); 
    }); 
} 

者がこのようにモジュールとしてエクスポートし、次のようにserver.jsに追加されます。

require('./latestNews.js')(app); 
require('./featuredNews.js')(app); 

私はserver.jsを作った、latestNews。 jsとfeaturedNews.jsを分離してコードを保存するortを1つの長いファイルの代わりに使用します。

次のように私の問題は今:私はこのようにそれを使用できるように

がどのように私はlatestNews.jsとfeaturedNews.jsに「checkAuth」関数を渡すことができますか?あなたのルータを設置場所

authorizedRouter = express.Router(); 

authorizedRouter.use(checkAuth); 

app.use('/', authorizedRouter); 

require('./latestNews.js')(authorizedRouter); 
require('./featuredNews.js')(authorizedRouter); 

ちょうど注意してください:

app.get("/latestNews", checkAuth (req, res) => { 
    res.sendfile(__dirname + '/latestNews.html'); 
}); 

答えて

1

あなたは、このチェックを持っており、あなたのアプリに搭載されている新しいルーターを作成することができます。アプリの/にマウントする場合は、すべてのapp.get/app.post宣言の後に配置する必要があります。

+0

完璧なソリューションです。 – dll

+0

ただ1つの余分な質問。したがって、私はapp.get/app.post宣言でcheckAuthの代わりに 'authorizedRouter'を使用しますか? – dll

+0

ルータをサブアプリケーションと考えてください。あなたは 'authorizedRouter.get/.post(..)'を行うことができます。ルート宣言に基づいてcheckAuthを使用する方がよい場合もあります。ルータはそれまでに捕捉されていないすべてのルートを捕捉します。 – drinchev

関連する問題