gpt4 book ai didi

javascript - ExpressJS : how to use authentication function in another file attached to server. js?

转载 作者:行者123 更新时间:2023-12-03 05:54:05 25 4
gpt4 key购买 nike

假设我在 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);
});

用户将首先看到登录页面。登录后,他可以看到主页。 app.get('/main',... 中使用函数 checkAuth 来实现此目的。

我附加了另外两个文件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');
});

最佳答案

您可以创建一个具有此检查并安装到您的应用程序的新路由器:

authorizedRouter = express.Router();

authorizedRouter.use( checkAuth );

app.use( '/', authorizedRouter );

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

请小心安装路由器的位置。如果您想将其安装在应用的 / 处,则应将其放在所有 app.get/app.post 声明之后。

关于javascript - ExpressJS : how to use authentication function in another file attached to server. js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40014962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com