【问题标题】:JSON or Object Literal as config file in NodeJSON 或 Object Literal 作为 Node 中的配置文件
【发布时间】:2015-08-18 04:18:52
【问题描述】:

我们从这两个帖子中知道 JSONObject Literal 之间的区别

What is the difference between JSON and Object Literal Notation? What's the difference between Javascript Object and JSON object

今天,我和我的同事讨论了这个话题,关于在Node.js 中使用JSONObject Literal 作为配置文件。

我同事的意见是使用JSON

// message.json
{   "aa": "content",
    "enable": true,
    "media": {
        "event": "Winner",
        "message": "Congratulations!"
    }
}

// app.js
filepath = "./message.json";
var file = fs.readFileSync(filepath, 'utf-8');
console.log(JSON.parse(file));

但是,我坚持Object Literal

// message.js
exports.value = {
    "aa": "content",
    "enable": true,
    "media": 
    {
        "event": "Winner",
        "message": "Congratulations!",
    }
}
//app.js
var vv = require('./message.js');

console.log(vv.value.media.message);

谁能告诉我它们之间的区别?有没有更好的?

【问题讨论】:

标签: javascript json node.js object


【解决方案1】:

这主要是基于意见的,但 JSON 配置有一个主要优势 - 它与语言无关,因此如果您需要非 JS 脚本来读取配置以用于其他目的,您可以轻松完成。

使用 JSON 还有助于确保您的配置是静态的,并消除开始向其添加逻辑和功能的诱惑。

请注意,您也可以 require('./message.json') 从 Node > 0.5.x 开始,因此没有真正的功能差异。

【讨论】:

    【解决方案2】:

    归结为您团队的最佳实践,但我建议使用 JSON。

    • node.js 的惯例是使用 json 作为配置文件——例如,package.json 就是一个例子。

    • 此外,像 JSON 这样的序列化格式可以由多个系统处理,而使用 JavaScript 源文件则变得很尴尬。您的配置文件可能会在某个时候从配置服务器提供;在这种情况下,一个简单的序列化肯定是要走的路,因为配置服务器最终可能会使用数据库来保存配置信息并简单地按需将其准备为 JSON

    【讨论】:

      【解决方案3】:

      这取决于个人喜好,但我发现exports 方式更方便,并且需要模块的节点方式。

      我认为后面的 require 正在做与你在第一种方法中所做的类似的操作,所以为什么要重新发明轮子。

      【讨论】:

        【解决方案4】:

        我的团队使用 JSON,但至少有些人认为 JS 提供了更大的灵活性。

        https://blog.risingstack.com/node-js-best-practices-part-2/

        【讨论】:

          【解决方案5】:

          我想主要的区别在于,最终你需要一个 JavaScript 对象来工作。因此,如果您从 JSON 文件加载配置,将需要一个额外的步骤来将 JSON 字符串解析为 JS 对象。

          根据此 JSON 文件的大小,解析它时可能会有性能损失。

          【讨论】:

            猜你喜欢
            • 2013-03-06
            • 1970-01-01
            • 2016-06-18
            • 2012-06-19
            • 2018-02-28
            • 1970-01-01
            • 2021-08-05
            相关资源
            最近更新 更多