Я создаю приложение для косых кошек для практики и хочу реализовать возможность для пользователей создавать собственное пространство для обмена сообщениями. При создании пространства сообщений в мою базу данных создается и сохраняется уникальный ключ. Мой план состоит в том, чтобы использовать эти уникальные ключи для обслуживания одной и той же html-страницы с функцией обмена сообщениями. Теоретически это сработает, но у меня возникли проблемы с извлечением ключей и их использованием для маршрутизации в файл message.html. Есть ли способ запустить мой сервер, получить ключи и сохранить их на глобальную переменную THEN route to html page? Я использую Node, Express и MongoDB.
Вот как выглядит мой код на задней панели для извлечения ключей:
var dbKeys = [];
db.messageSpaces.find({}, {"_id": 0, "name": 0}, function(error, data) {
if (error) {
console.log(error);
}
else {
for (var i = 0; i < data.length; i++) {
dbKeys.push(data[i].key);
}
}
});
И как я пытаюсь их проложить:
for (var i = 0; i < dbKeys.length; i++) {
app.get('/${dbKeys[i]}', function(req, res) {
res.sendFile(path.join(__dirname, "public/message.html"));
});
}
Я думаю, что я бы использовал один вызов app.get
и использовал один из методов, описанных в https://expressjs.com/en/guide/routing.html#route-parameters, для выполнения базовой проверки формата. Возможно, что-то вроде этого:
app.get('/:id([a-z0-9]{16})', function(req, res) {
console.log(req.params.id);
});
Вышеприведенное предполагает, что идентификатор длиной 16 символов и состоит только из строчных букв и цифр.
Затем вы должны проверить, соответствует ли идентификатор пространства сообщений реальному пространству сообщений внутри обработчика get
. Если это не так, вы можете либо обработать ошибку, либо передать ее вниз по цепочке промежуточного программного обеспечения, вызвав next()
(вам нужно будет добавить next
аргумент в свой обработчик для работы).