Javascript 是否为每个代理添加到列表?
对于此列表中的每个代理,我将其拆分,并需要将其附加到文件中的数组中 我已尝试过此方法,但在5个代理中只添加了一个: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
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的字符串。