【问题标题】:nodejs + express where load context configuration from databasenodejs + express 从数据库加载上下文配置
【发布时间】:2020-09-17 09:07:24
【问题描述】:

我的场景 id 是一个连接到 mysql 数据库的 nodejs + express 应用程序。

有一些上下文配置,对所有网站和所有用户都有效,我需要在每个页面请求时从数据库加载(不是在应用程序初始化时,因为我不想在配置更改时重新加载整个服务器)。

我的想法是使用一个简单的中间件将上下文注入到请求中,如下所示:

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()); 之后使用中间件,否则即使是静态文件请求(图像、css、js...)也会调用我的中间件。

这种方法正确吗?

谢谢

【问题讨论】:

    标签: javascript mysql node.js express configuration


    【解决方案1】:

    这在我的书中有效!我可能会建议您将它放在路由器上,例如,这仅适用于登录用户。您还可以进一步隔离您的路由器,以便如果有任何 ajax 路由,则不会要求这些值仅被忽略。所以代码看起来不错,如果性能成为问题,只需实现一个缓存,例如,每半分钟或十个请求刷新一次。但它只有一个查询,所以目前看来还不错。

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 2016-02-29
      • 2019-03-30
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      相关资源
      最近更新 更多