在节点 js 中通过循环编辑 JSON 文件

Edit JSON file through loop in node js

本文关键字:循环 编辑 JSON 文件 节点 js      更新时间:2023-09-26

>我正在制作一个监视器,如果服务器启动或关闭,它将显示在网站上。在编辑 JSON 文件时,我已经尝试了很多东西,包括正则表达式、替换等。我需要 JSON 文件中的"状态"根据 200 响应代码调整为向上或向下(status=up/down 现在只是一个占位符)。每次我能够将 JSON 文件附加到任何内容时,文本总是被添加到对象之外的页面底部。请务必注意,此 JSON 文件用于前端的方式是,如果状态为"up",则显示绿色块,如果状态为"down"则显示红色块。在我的原始 JSON 文件中总共还有 11 个服务器。

const config = require(__dirname + '/config/config.json'); 
var fs = require('fs');
...
function wrapper() {
//FOR EACH SERVER IN CONFIG FILE
for (var server of config.server) {     
    var url = server.ip + ':' + server.port;
    var name = url + " " + server.name;
     // DO REQUEST
     loadUrl(url, name); 
   }
}
function loadUrl(url, name) {
var start = new Date().getTime();
request(url, function(error, response) {
    var logName =  name.split(' ');
    var end = new Date().getTime();
    var time  = end - start;
    if (!error) {
        console.log(DateTime + " " + name + " " + response.statusCode + " - response time: " + time + "ms");
        var total = DateTime + " " + name + " " + response.statusCode + " - response time: " + time + "ms'n";
        fs.appendFile("./BY-logs/" + logDates + "_" + logName[1] + ".txt", total, encoding='utf8', function (err) { if (err) throw err; }); //creating or adding to logfile
      //CHANGE JSON ACCORDING TO STATUS
            if( response.statusCode != 200) {               
           fs.appendFile('./config/config.json', status = down, function (err) {});
            } else {
            fs.appendFile('./config/config.json', status = up, function (err) {});
            }
         } 
    }
)};
wrapper();

来自 JSON 文件的示例:

{
"port": 3000,
"server": [{
    "id": 1,
    "name": "abcdefghi2(node-1)",
    "ip": "http://123.123.123.12",
    "port": "8080",
    "status": "up"
}, {
    "id": 2,
    "name": "abcdefg(node-2)",
    "ip": "http://123.123.123.13",
    "port": "8080",
    "status": "up"
}]
}

您需要将 JSON 加载到程序中,更改object的值,然后将其写入文件。

尝试以下操作:

var config = require('./config/config.json');
config.server.forEach((server, index, array) => {
    if (server.id == "x")
        server.status = "up"; // etc.
});
fs.writeFile('./config/config.js', config, (err) => { /* ... */ });

旁注:我建议将服务器存储为该对象中的对象,而不是对象数组。这样可以更轻松地获取所需的服务器对象。