は、私は、ユーザーが最初のログインページが表示されます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');
});
完璧なソリューションです。 – dll
ただ1つの余分な質問。したがって、私はapp.get/app.post宣言でcheckAuthの代わりに 'authorizedRouter'を使用しますか? – dll
ルータをサブアプリケーションと考えてください。あなたは 'authorizedRouter.get/.post(..)'を行うことができます。ルート宣言に基づいてcheckAuthを使用する方がよい場合もあります。ルータはそれまでに捕捉されていないすべてのルートを捕捉します。 – drinchev