【问题标题】:Node settings file vs mysql store节点设置文件 vs mysql 存储
【发布时间】:2016-03-03 12:11:44
【问题描述】:

我已经构建了我的第一个 Node 应用程序,其中我需要大量使用 5-10 个全局变量。问题是我希望能够在不重新启动服务器的情况下更改这些值。

所以我设置了一个间隔并从(JSON?)文件或通过对数据库的几个查询来更新这些文件。

现在我在这里有什么更好的选择?应用中同时使用了mysql和读取文件模块。

基于安全性不是最好将 json 文件放在公用文件夹后面并从中读取吗?虽然没有 sql 注入是可能的,但我认为在数据库中也应该很安全。

你们怎么看??仍然是 Node JS 的新手。

谢谢

【问题讨论】:

  • 基于安全性不是最好不使用全局变量吗?
  • 正如我所提到的,我还是 Node 的新手,但我确实需要它们,我不想每次做一些事情时都查询数据库以获取 max_items 值。跨度>
  • 我的评论不在 Node.js 的上下文中。全局变量在任何编程语言中都不好。
  • 我明白了,您建议如何处理上述“检查”?
  • 使用 IIFE(立即调用函数表达式)。

标签: mysql json node.js


【解决方案1】:

使用yamljs,开销是您需要安装它。从您的问题来看,您似乎已经在您的应用中使用了一堆 3rd 方模块。

为什么不使用 node.js 本身的一部分?

使用fs 模块。

例子:

var fs = require('fs');
var obj;
fs.readFile('myData.json', 'utf8', function (err, data) {
  if (err) throw err;
  obj = JSON.parse(data);
});

文档:https://nodejs.org/api/fs.html#fs_fs_readfile_file_options_callback

【讨论】:

    【解决方案2】:

    将配置变量传递给服务器的常用技术是通过 YAML 文件。通常,该文件在服务器启动时会读取一次,但您可以定期查询它们的文件以查看上次更新的时间以及文件是否已更改,更新当前使用的配置变量。

    yamljs

    YAML = require('yamljs');
    config = YAML.load('myfile.yml');
    

    然后您可以使用fs.stat 的 mtime 属性定期检查文件上次修改的时间

    fs.stat(path, [callback])
    

    如果您发现上次修改时间已更改,则可以重新读取 YAML 文件并使用新值更新您的配置。 (您可能需要进行完整性检查以确保文件没有损坏等)

    如果您不想自己编写文件监视逻辑,我建议您查看chokidar

    // Initialize watcher.
    var watcher = chokidar.watch('myfile.yml', {
      ignored: /[\/\\]\./,
      persistent: true
    });
    
    // Add event listeners.
    watcher.on('change', function(path) { 
        // Update config
    })
    

    【讨论】:

    • 和我看到的差不多!!谢谢
    • 在这种情况下,您需要安装yamljs 模块,它是第 3 方。为什么不只使用一个简单的 JSON?我建议使用 fs 模块,它是节点的一部分。
    • 这里是一些使用 yaml 的专业人士的好答案 stackoverflow.com/questions/1726802/…
    猜你喜欢
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2017-04-28
    相关资源
    最近更新 更多