#javascript #html #node.js #express #login
#javascript #HTML #node.js #экспресс #аутентификация
Вопрос:
Представьте, что у меня есть следующий фрагмент кода в 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' amp;amp; 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');
});
Ответ №1:
Вы можете создать новый маршрутизатор, который имеет эту проверку и подключен к вашему приложению :
authorizedRouter = express.Router();
authorizedRouter.use( checkAuth );
app.use( '/', authorizedRouter );
require('./latestNews.js')(authorizedRouter);
require('./featuredNews.js')(authorizedRouter);
Просто будьте осторожны, где вы монтируете свой маршрутизатор. Если вы хотите смонтировать его в /
своем приложении, вы должны поместить его после всех ваших app.get/app.post
объявлений.
Комментарии:
1. Только один дополнительный вопрос. Таким образом, я использую ‘authorizedRouter’ вместо checkAuth в своих объявлениях app.get / app.post?
2. Подумайте о маршрутизаторе как о дополнительном приложении. Вы можете сделать
authorizedRouter.get/.post(..)
. Иногда может быть лучше использовать checkAuth на основе вашего объявления маршрутов. Маршрутизатор будет захватывать все маршруты, которые еще не были захвачены.3. Аааа, теперь я понял! Большое спасибо! 🙂