nodejs + express где загрузить конфигурацию контекста из базы данных - PullRequest
0 голосов
/ 29 мая 2020

мой идентификатор сценария nodejs + express приложение, подключенное к базе данных mysql.

Есть некоторые конфигурации контекста, действительные для всех веб-сайтов и всех пользователей, которые мне нужно загрузить с база данных при каждом запросе страницы (не при инициализации приложения, потому что я не хочу перезагружать весь сервер при изменении конфигурации).

Моя идея состояла в том, чтобы использовать простое промежуточное ПО для вставки контекста в запрос, вот так:

const express = require('express');
const contextSetup = require('./contextSetup');

const app = express();
...
app.use(contextSetup.middleWare);
...

и в contextSetup.js:

const DB = require('./DB');

module.exports.middleWare = (req, res, next) => {
  DB.query('select `code`, `data` from `setting` order by `sort`')
    .then((rows) => {
      const keyVals = {};
      rows.forEach((row) => {
        keyVals[row.code] = row.data;
      });
      req.appContext = keyVals;
      next();
    })
    .catch((err) => next(err));
};

Единственное предупреждение - использовать промежуточное ПО после app.use(express.static());, иначе мое промежуточное ПО будет вызываться даже для stati c запрос файлов (изображения, css, js, ...).

Правильный ли этот подход?

Спасибо

1 Ответ

0 голосов
/ 30 мая 2020

это работает в моей книге! Я мог бы предложить вам установить это на маршрутизаторе, так что это работает, например, только для зарегистрированных пользователей. Вы также можете дополнительно изолировать свои маршрутизаторы, чтобы при наличии каких-либо маршрутов ajax эти значения не требовались только для игнорирования. Так что код кажется прекрасным, и если производительность становится проблемой, просто реализуйте кеш, который, скажем, обновляется каждые полминуты или десять запросов. Но это только один запрос, так что на данный момент это нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...