连续写入服务器中的多个文件

Consecutive writings to several files in the server

(* 由于 已经或多或少得到了回答,代码也有所改进,我打开一个新问题。 *)

我想用模仿 plunker 的 MEAN 堆栈构建一个简单的游乐场:我们在左侧有一个文件列表和一个文本区域,在右侧有一个实时预览。请注意,文件保存在一个临时文件夹中,实时预览是由该临时文件夹中的文件注入的 iframe

********** 我写了什么 **********

在 html 文件中,我为每个文件添加了一个控制器,这样我就可以准确跟踪文本区域中更改的文件。然后,我只需要将该文件保存到服务器,而不是所有文件:

<div ng-repeat="file in files track by $index" ng-controller="fileCtrl">
    <a ng-click="go(file)">{{file.name}}</a>
</div>

控制器:

app.controller('fileCtrl', ['$scope', 'codeService', function ($scope, codeService) {
    $scope.$watch('file', function () {
        codeService.render($scope.files, $scope.file);
    }, true);
}]);

codeService:

app.service('codeService', ['$http', function ($http) {
    this.render = function (files, changedFile) {
        $http.post('/writeFile', changedFile);
    };
}]);

路由器:

router.post('/writeFile', function (req, res, next) {
    var file = req.body;
    var fs = require('fs');
    fs.writeFile("public/tmp/" + file.name, file.body, function (err) {
        if (err) { return console.log(err) };
    });
});

********** 我的测试 **********

我的测试表明,textarea中的修改被很好地捕获,并且修改后的文件或多或少可以保存到服务器:它对于第一个,第二个写作来说效果很好,但是它.

后面的文章经常出问题

********** 我的问题 **********

谁能帮我重新构建代码以更好地处理:

  1. 写作的异步调用,这样所有的写作都很好(并且很快)进行了。
  2. 写作debounce,这意味着我们可以在每次保存之前稍等片刻。但是当我们有多个文件时它有点棘手:假设我们可以在文件之间切换非常快,在这种情况下debounce和异步保存如何执行?


1. 这里是 plunker http://plnkr.co/edit/NerwghZaqcRuoswHYPlq?p=preview 给你的,你可以在这里玩去抖动和异步功能。
2.一旦你在文件之间快速切换并输入不同的文件,只有最后的结果会被发送到服务器
3. 如果您从 BE 获取错误,请不要忘记处理错误(在每次 $http 调用服务器后添加 catch())
4. 在 Node Js 端,请添加简化任务的承诺库。个人比较喜欢蓝鸟http://bluebirdjs.com/docs/api/promise.all.html

var files = [];
for (var i = 0; i < 100; ++i) {
    files.push(fs.writeFileAsync("file-" + i + ".txt", "", "utf-8"));
}
Promise.all(files).then(function() {
    console.log("all the files were created");
});

希望对您有所帮助