Выполнение кода на стороне сервера во время работы узла

1

Я создаю приложение для косых кошек для практики и хочу реализовать возможность для пользователей создавать собственное пространство для обмена сообщениями. При создании пространства сообщений в мою базу данных создается и сохраняется уникальный ключ. Мой план состоит в том, чтобы использовать эти уникальные ключи для обслуживания одной и той же 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"));
    });
}
  • 1
    Я не думаю, что вы хотите определить экспресс-маршрут [app.get ()] внутри цикла for. Вы хотите определить маршрут с параметром, который является заполнителем для вашего ключа. См. Параметры маршрута в экспресс-документации: expressjs.com/en/guide/routing.html
Теги:
express

1 ответ

1
Лучший ответ

Я думаю, что я бы использовал один вызов 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 аргумент в свой обработчик для работы).

  • 0
    Спасибо за это! Я попробую и вернусь к тебе.
  • 0
    Эй, я знаю, что этот ответ немного поздно, но это отлично сработало для меня! Полезно знать и о будущих проектах! Еще раз спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню