如果数据不存在,只写入文件?
Only write to file if data doesn't exist?
我正在创建一个推送通知服务器,并将订阅存储在一个名为 clients.json
的 JSON 文件中。这工作得很好,我可以使用 fs.writeFile('clients.json', data, callback)
,它正在工作。我遇到的问题是,如果 JSON 文件中有多个订阅实例,服务器会为订阅的每个实例多次发送推送事件。
我现在正在尝试的是仅在文件中尚不存在订阅对象时才将其写入文件。我尝试了以下方法:
if (!JSON.parse(fs.readFileSync('clients.json')).endpoints.includes(subscription)) {
clients.endpoints.push(subscription);
fs.writeFile('clients.json', JSON.stringify(clients), err=>{if(err){console.log(err)}});
}
对我来说似乎是正确的,但它似乎并不关心我的情况,因为代码块每次都运行并且订阅被多次插入到文件中。
如果有帮助,这是 clients.json
:
{
"endpoints":[
/* Client subscriptions end up in this array */
]
}
如有任何帮助,我们将不胜感激。
在 js 中,只有基本类型通过它们的值进行比较。如果 subscription
是任何类型的对象,与另一个对象比较时,它会 return false
,即使它包含相同的数据,因为它们是按它们引用的对象进行比较的。
我正在创建一个推送通知服务器,并将订阅存储在一个名为 clients.json
的 JSON 文件中。这工作得很好,我可以使用 fs.writeFile('clients.json', data, callback)
,它正在工作。我遇到的问题是,如果 JSON 文件中有多个订阅实例,服务器会为订阅的每个实例多次发送推送事件。
我现在正在尝试的是仅在文件中尚不存在订阅对象时才将其写入文件。我尝试了以下方法:
if (!JSON.parse(fs.readFileSync('clients.json')).endpoints.includes(subscription)) {
clients.endpoints.push(subscription);
fs.writeFile('clients.json', JSON.stringify(clients), err=>{if(err){console.log(err)}});
}
对我来说似乎是正确的,但它似乎并不关心我的情况,因为代码块每次都运行并且订阅被多次插入到文件中。
如果有帮助,这是 clients.json
:
{
"endpoints":[
/* Client subscriptions end up in this array */
]
}
如有任何帮助,我们将不胜感激。
在 js 中,只有基本类型通过它们的值进行比较。如果 subscription
是任何类型的对象,与另一个对象比较时,它会 return false
,即使它包含相同的数据,因为它们是按它们引用的对象进行比较的。