nodejs + express 其中从数据库中加载上下文配置。

问题描述 投票:0回答:1

我的方案id是一个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()); 否则我的中间件会被调用,即使是静态文件的请求(图片,css,js,...)。

这种方法正确吗?

谅谅

javascript mysql node.js express configuration
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.