gpt4 book ai didi

javascript - NodeJS 阻止对文件的多次访问

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:28 25 4
gpt4 key购买 nike

我有一个接收文件的 REST API。我的 Node 应用程序存储在本地存储中的每个文件都被添加到 xml 和 json 文档中。如何防止应用程序不会在文档中几乎同时写入两个文件,这会导致文档无效。

目前,我将所有文件放入一个数组中,并仅存储数组中的最后一个文件。这可以防止 xml/json 文档仅被访问一次。

this.files = new Array();
this.running = false;

this.app.push('/file', function(req, res){
this.files.add(req.body.file);
if(!this.running)
this.storeFile();
}

this.storeFile = function(){
this.running = true;
fs.write(files[files.length-1], this.succ, this.err);

this.succ(){
files.splice(fileIndex);
if files.length greater than 0
app.storeFile();
else
this.running = false;
}

这并不能阻止同时写入多个文件。如果 running = false 并且两个推送事件几乎同时出现。循环执行两次,每个文件存储两次。并且 xml/json 文件被访问/打开/写入两次,这会导致错误/异常。

最佳答案

这是一个如何使用共享资源处理并发类型的问题。解决这个问题的最快方法是使用数据库,其他开发人员已经通过符合 ACID 的事务解决了这个问题。

其他解决方案取决于您的代码结构和您的期望。您可以锁定文件进行写入或使用信号量来控制对文件的访问,但由于您正在使用和重写文件存储的数据,因此可能会发生某些更改将丢失,或者某些锁定将持续到超时等情况。避免此问题的另一种方法是事件源,其中您始终附加文件,但从不覆盖。

关于javascript - NodeJS 阻止对文件的多次访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25376674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com