如何重置使用 edit-json-file 编辑的文件

Posted

技术标签:

【中文标题】如何重置使用 edit-json-file 编辑的文件【英文标题】:How to reset a file edited with edit-json-file 【发布时间】:2018-12-13 09:20:17 【问题描述】:

我一直在为 discord.js 机器人处理这个队列。有人做了什么 !smm 提交,然后它将它添加到 JSON 文件中,如下所示:

"1": "id",
"2": "anotherid"

然后,如果一个人要执行 !smm delete,它将删除列表中的第一项。出于某种原因,如果我这样做,它将保留相同数量的对象,但它会复制最后一个对象,所以如果我的 JSON 文件是这样的

"1": "id",
"2": "anotherid",
"3": "thisid"

到最后

"1": "anotherid",
"2": "thisid",
"3": "thisid"

如果您有更好的队列方法,请告诉我,否则这是我的命令及其子命令的代码。安装了一个 editJsonFile api,所以当你看到 "queue.set("foo", "foobar")" foo 是对象名称,而 foobar 是对象的值:

if(cmd === `$prefixsmm`)
    let type = args[0];
    let a = args[1];
    if(type === "submit")
        message.delete()
        if(a)
            if(a.charAt(4) === "-" && a.charAt(9) === "-" && a.charAt(14) === "-")
                for(x = 1; x < 10000; x++)
                    if(!file[x])
                        console.log(x)
                        queue.set(`$x`, `$a`)
                        return;
                    
                
            else
                message.author.send("Sorry but you typed in the ID wrong. Make sure you include these '-' to separate it.")
            
        
    
    if(type === "delete")
        message.delete()
        let arr = [];
        for(x = 1; x < 10000; x++)
            if(file[x])
                arr.push(file[x])
            else

                let arrr = arr.slice(1)
                console.log(arrr)
                fs.writeFile(`./queue.json`, '\n    \n', (err) => 
                    if (err) 
                        console.error(err);
                        return;
                    ;
                );
                setTimeout(function()

                    console.log(arrr.length)
                    for(e = 0; e < arrr.length; e++)
                        console.log(`e: $e || arrr.length: $arrr.length`)
                        queue.set(`$e+1`, `$arrr[e]`)
                    

                    return;
                , 3000)
                return;
            
        

    

【问题讨论】:

【参考方案1】:

我想我已经发现了您的问题:在第 32 行,您正在使用fs.writeFile“重置”文件。由于文件由editJsonFile 缓存,因此重写文件对您的队列变量没有影响,并且当您设置另一个值时,包会在内部重写之前缓存的值。

为避免这种情况,您可以在调用fs.writeFile()(或fs.writeFileSync())后重置变量。这是我用RunKit测试过的一个小例子:

var editJsonFile = require("edit-json-file");
var fs = require("fs");

var file = editJsonFile(`./queue.json`); //load queue.json

file.set("1", "foo"); //set your values
file.set("2", "bar");

console.log(file.get()); //this logs "1: "foo", 2: "bar""

fs.writeFileSync(`./queue.json`, '\n    \n'); //reset queue.json

file = editJsonFile(`./queue.json`); //reload the file <---- this is the most important one

file.set("3", "test"); //set your new variables

console.log(file.get()); //this logs "3: "test""

【讨论】:

谢谢。这很有效,而且比我不太有效的解决方案要好得多。

以上是关于如何重置使用 edit-json-file 编辑的文件的主要内容,如果未能解决你的问题,请参考以下文章

编辑文本后如何重置tableview的高度

在 ACE 编辑器中重置撤消堆栈

如何重置CentOS 7的Root密码,我已成功重置密码

如何重置 PostgreSQL 密码

linux系统root用户忘记密码的重置方法

linux系统root用户忘记密码的重置方法