Node.js&两个请求之间的Express / Can上下文切换可以是同步代码吗?

时间:2015-03-01 13:14:20

标签: javascript node.js

我在node.js中有以下代码,使用Express模块:

app.post('/saveDoc', function(req, res) {
    // Code to take params with req.busboy.on('field'...
    req.busboy.on('file', function(fieldname, file) {
    var correctFlags = "";
    var exists = fs.existsSync(returnFilePath(uuid) + "/" + fileFor + "_part");
     if (exists){
         correctFlags = "r+"
     }
     else{
         correctFlags = "w"
      }
      var fstream1 = fs.createWriteStream(returnFilePath(uuid) + "/" + fileFor + "_part", {start: parseInt(start), flags: correctFlags});
      file.pipe(fstream1);
      })

此代码的目的是将相同文件的某些部分写入相同的文件中,使用不同的偏移量(以块的形式写入文件)。

我想确保只有一个文件块会创建文件,并写入偏移量(使用"w"标志),而其他文件将转到"r+"标志。

我担心以下情况:

  1. 我的服务器针对saveDoc

  2. 收到了returnFilePath(uuid) + "/" + fileFor + "_part"的2个请求
  3. 然后该文件仍然不存在,而且这两个文件正在获取' w'标志

  4. 如果请求之间存在上下文切换,则会发生这种情况:

    1. 第一个请求将执行下一个命令:var exists = fs.existsSync(returnFilePath(uuid) + "/" + fileFor + "_part");并获取false。

    2. 上下文切换完成

    3. 第二个会执行命令:var exists = fs.existsSync(returnFilePath(uuid) + "/" + fileFor + "_part");并且也会失败。

    4. 结果是" false"对于这两个请求。

    5. 这可能吗?或者在我的代码中我确保所有都以同步方式完成,因此上下文切换是不可能的?

1 个答案:

答案 0 :(得分:0)

我强烈怀疑这不是您想要做的正确格式。更加结构化的解决方案,比如将数据存储在数据库中,或者只是更像JSON的结构,似乎更好。

也就是说,你可以使用fs.appendFile,因为它会处理是否写入或追加。