Node.js异步读取和写入
问题描述:
我遇到了异步文件读写操作的问题。只有最后一个文件被写入服务器。 JS:Node.js异步读取和写入
function uploadassignment(req, res){
var path;
var multiparty = require("multiparty");
var form = new multiparty.Form();
console.log(req.query);
var filelength = req.query.filecount;
console.log(filelength);
form.parse(req, function(err, fields, files){
console.log(req.body);
for(i=0;i<filelength;i++){
var img = files.file[i];
console.log(img);
console.log('divide');
var fs = require('fs');
fs.readFile(img.path, function(err, data){
var originalfile = img.originalFilename.split('.');
console.log(originalfile);
var file_ext = originalfile[1];
path = "public/assignments/"+img.originalFilename;
console.log(path);
fs.writeFile(path, data, function(error){
if(error)console.log(error);
});
})
}
});
};
答
这是一个通过使用循环变量而没有闭包导致的常见错误。在调用读取操作的回调时,循环已终止,索引i
指向最后一个元素(因此您的img
包含最后一个文件)。创建一个接受索引作为参数并从循环调用此函数的函数(闭包):
function blah(i) {
var img = files.file[i];
console.log(img);
console.log('divide');
var fs = require('fs');
fs.readFile(img.path, function(err, data){
var originalfile = img.originalFilename.split('.');
console.log(originalfile);
var file_ext = originalfile[1];
path = "public/assignments/"+img.originalFilename;
console.log(path);
fs.writeFile(path, data, function(error){
if(error)console.log(error);
});
})
}
for(i=0;i<filelength;i++) blah(i);
答
这还不是很一个答案,但它是一个评论太长。 什么不起作用?该文件读取/你的代码的编写位工作正常:
var fs = require("fs")
img = {
path: "./test.txt",
originalFilename: "test.txt"
}
fs.readFile(img.path, function(err, data){
if(err)console.log(err);
var originalfile = img.originalFilename.split('.');
console.log(originalfile);
var file_ext = originalfile[1];
path = "public/assignments/"+img.originalFilename;
console.log(path);
fs.writeFile(path, data, function(error){
if(error)console.log(error);
});
})
带有目录结构,如:
script.js
text.txt
public
assignments
我认为你的问题可能是你正在分配“FS”在本地,然后试图从异步函数中调用它。这可能是为什么只有最后一个工作(也许)。 尝试移动var fs = require('fs');
到您的代码的顶部。
thankyou akonsu that worked! – 2014-11-07 01:54:26