Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否为每个代理添加到列表?_Javascript_Json_Fs - Fatal编程技术网

Javascript 是否为每个代理添加到列表?

Javascript 是否为每个代理添加到列表?,javascript,json,fs,Javascript,Json,Fs,对于此列表中的每个代理,我将其拆分,并需要将其附加到文件中的数组中 我已尝试过此方法,但在5个代理中只添加了一个: function saveProxies() { const fs = require("fs") let proxies = document.getElementById("proxies").value.split(/\r?\n/) // for(i = 0; i < proxies.length; i++) { // awa

对于此列表中的每个代理,我将其拆分,并需要将其附加到文件中的数组中

我已尝试过此方法,但在5个代理中只添加了一个:

function saveProxies() {
    const fs = require("fs")

    let proxies = document.getElementById("proxies").value.split(/\r?\n/)

    // for(i = 0; i < proxies.length; i++) {
    //     await doo(proxies[i])
    // }

    proxies.forEach(proxy => {
        // doo(proxy)
        let p1 = `${proxy.split(":")[0]}:${proxy.split(":")[1]}`
        let p2 = proxy.split(":")[2]
        let p3 = proxy.split(":")[3]

        fs.readFile("views/proxies.json", (err, data) => {
            let arr = JSON.parse(data)

            arr.push({
                address: p1,
                username: p2,
                password: p3
            })

            fs.writeFile("views/proxies.json", JSON.stringify(arr), (err) => {})
        })


    })
}
函数saveProxies(){
常数fs=要求(“fs”)
让proxies=document.getElementById(“proxies”).value.split(/\r?\n/)
//对于(i=0;i{
//督察(代理人)
设p1=`${proxy.split(“:”[0]}:${proxy.split(“:”[1]}`
设p2=proxy.split(“:”[2]
设p3=proxy.split(“:”[3]
fs.readFile(“views/proxies.json”,(err,data)=>{
让arr=JSON.parse(数据)
arr.push({
地址:p1,
用户名:p2,
密码:p3
})
writeFile(“views/proxies.json”,json.stringify(arr),(err)=>{})
})
})
}
是异步的,您的代码在处理下一个代理之前不会等待它完成。因此,对于每个代理,代码读取内存中的初始文件,更改数据结构(添加一个条目),然后将其写回文件。最后一次调用
fs.writeFile()
完成后决定文件的内容

一个简单的解决方案是使用和。这样就没有异步处理,对于每个代理,代码读取文件的实际内容,并在处理下一个代理之前对其进行更新

但此解决方案效率不高再次读取(和解析)文件内容没有意义,用于写入文件的数据已经存在于内存中

正确的解决方案是读取文件一次,更新内存中所有代理的数据,然后将其写回文件

同步版本可能如下所示:

const fs = require("fs")

let proxies = document.getElementById("proxies").value.split(/\r?\n/)
let filepath = "views/proxies.json";

function saveProxies(proxies, filepath) {
    let data = fs.readFileSync(filepath)
    let arr = JSON.parse(data)

    proxies.forEach((proxy) => {
        let pieces = proxy.split(':')
        arr.push({
            address: `${pieces[0]}:${pieces[1]}`,
            username: pieces[2],
            password: pieces[3]
        })
    })

    fs.writeFileSync(filepath, JSON.stringify(arr))
}

您还应该处理错误(该文件不存在或不可读/写,其内容不是有效的JSON等)。

尝试
fs.appendFile
instead@Nuhman文件的内容是JSON。向JSON追加任何内容都会生成一个非JSON的字符串。