节点appendFile不将数据块附加到文件系统上的文件

我有一个程序试图使用curl从请求中获取值,并将它们存储在一个文件中,并将存储的内容返回。 在文件中存储或追加内容的决定是基于一个查询参数appendFlag现在,当我运行这个程序我在控制台中得到的是“ 真正的 ”和“ 追加 ”这表明它确实读取标志去if部分但不知何故appendFile函数不起作用。

var http = require('http'); var url = require('url'); var querystring = require('querystring'); var fs = require('fs'); http.createServer(function(request,response){ var str = request.url.split('?')[1]; var query = querystring.parse(str); var writeStream = fs.createWriteStream(query['fileName']); console.log("query - "); console.log(query["appendFlag"]); request.on('data',function(chunk){ if(query["appendFlag"]=="true"){ console.log("appending"); fs.appendFile(query['fileName'],chunk.toString(),function(err){ if(err) throw err; }); }else{ var bufferGood = writeStream.write(chunk); if(!bufferGood) request.pause(); } }); request.on('end',function(){ response.writeHead(200); response.write("\n Content with this url is - \n"); var readStream = fs.createReadStream(query['fileName'],{bufferSize:64*1024}); readStream.on('data',function(chunk){ response.write(chunk.toString()); }); readStream.on('end',function(){ response.write("\n"); response.end(); }); }); writeStream.on('drain',function(){ request.resume(); }); }).listen(8080); 

然后在阅读了一个答案( 如何创build附加writeStream在Node.js )我试着 –

 // Program to extract url from the request and writing in that particular file var http = require('http'); var url = require('url'); var querystring = require('querystring'); var fs = require('fs'); http.createServer(function(request,response){ var str = request.url.split('?')[1]; var query = querystring.parse(str); var writeStream = fs.createWriteStream(query['fileName']); options = { 'flags': 'a' , 'encoding' : null, 'mode' : 0666 } var appendStream = fs.createWriteStream(query['fileName'],[options]); console.log("query - "); console.log(query["appendFlag"]); request.on('data',function(chunk){ if(query["appendFlag"]=="true"){ console.log("appending"); var bufferGood = appendStream.write(chunk.toString()); if(!bufferGood) request.pause(); }else{ var bufferGood = writeStream.write(chunk.toString()); if(!bufferGood) request.pause(); } }); request.on('end',function(){ response.writeHead(200); response.write("\n Content with this url is - \n"); var readStream = fs.createReadStream(query['fileName'],{bufferSize:64*1024}); readStream.on('data',function(chunk){ response.write(chunk.toString()); }); readStream.on('end',function(){ response.write("\n"); response.end(); }); }); writeStream.on('drain',function(){ request.resume(); }); }).listen(8080); 

那是把标志改成' a ',也没有附加数据?

你可以使用你的第一个变种。 但在appendFile()之前,您已经为相同的query["filename"]打开了writeStream 。 stream已经打开。

 var writeStream = fs.createWriteStream(query['fileName']); options = { 'flags': 'a' , 'encoding' : null, 'mode' : 0666 } var appendStream = fs.createWriteStream(query['fileName'],[options]); 

可能是这样做更好:

 var options = { flags: query.appendFile ? 'w' : 'a' ... 

下一步:为什么[options] ? 你应该删除括号。

下一步:不能保证你会在querystringfilename参数。 请处理这种情况。