【发布时间】:2018-03-02 16:08:40
【问题描述】:
我有一个函数可以将用户输入(当前名为 app.json)从浏览器(客户端)下载到服务器
function downloadUpload(callback){
//Using formidable node package for downloading user input to server
var form = new formidable.IncomingForm();
form.on('fileBegin', function(name, file) {
file.path = file.name;
});
form.parse(req, function(err, fields, files) {
res.writeHead(200, { 'content-type': 'text/plain' });
res.write('received upload:\n\n');
res.end(util.inspect({ fields: fields, files: files }));
});
callback(null);
}
我有另一个函数,它获取上面下载的文件并将其转换为所需的格式(final.json),类似于这样。
function UpdateCode(callback){
var obj = fs.readFileSync('app.json', 'utf8');
var object = JSON.parse(obj);
var data2 = [];
for (var j = 0; j < object.length; j++) {
if (object[j].value == "TEST") {
data2.push(object[j]);
}
}
console.log(data2);
fs.appendFile('final.json', JSON.stringify(data2), function(err) {
if (err) throw err;
console.log('Saved!');
});
callback(null);
}
我希望它们按顺序运行,所以我使用了这样的异步系列方法
async.series([
downloadUpload,
UpdateCode
],function(err,result){
if(err) throw err;
else{
console.log(result);
}
});
问题是文件(app.json) 正在下载,并显示一条错误消息,指出当前文件夹或目录中不存在app.json。我哪里错了?
【问题讨论】:
-
因为您在下载文件之前调用了
callback。 -
我没听懂你。回调是异步系列函数的一部分,我正在尝试复制它。您的意思是我应该删除第一个函数中的回调以使其正常运行吗?
-
callback(null);不会等待form.parse完成,fs.appendFile也是如此。应该分别在res.end和console.log('Saved!');之后调用。 -
我改变了格式。 Node 现在在下载文件后立即崩溃,并且根本不运行第二个函数。
标签: node.js express asynchronous formidable