想象一下,我在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('/ main',...以实现此目的。
我附上了另外两个文件latestNews.js和featuredNews.js。这些还包括app.get,app.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,以便分离工作并保持代码短而不是一个长文件。
我的问题现在如下:
如何将'checkAuth'函数传递给latestNews.js和featuredNews.js所以我可以像这样使用它?
app.get("/latestNews", checkAuth (req, res) => {
res.sendfile(__dirname + '/latestNews.html');
});
答案 0 :(得分:1)
您可以创建一个具有此检查并已安装到您的应用的新路由器:
authorizedRouter = express.Router();
authorizedRouter.use( checkAuth );
app.use( '/', authorizedRouter );
require('./latestNews.js')(authorizedRouter);
require('./featuredNews.js')(authorizedRouter);
在安装路由器的地方要小心。如果您要将其安装在应用的/
,则应将其放在所有app.get/app.post
声明之后。