curl을 사용하여 요청에서 값을 가져 와서 파일에 저장하고 저장된 내용을 다시 제공하려는 프로그램이 있습니다. 내가 콘솔에서 얻고 무엇을이 프로그램을 실행할 때 저장하거나 파일의 내용을 추가하기로 한 결정은 쿼리 매개 변수 appendFlag 을 기반으로 지금이 그것을 실제로 읽고 제안 "는을 추가" "사실"이고 플래그는 if 부분으로 이동하지만 어떻게 든 appendFile 함수가 작동하지 않습니다.노드 append 파일 시스템에 파일 청크를 추가하지 않는 파일
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);
그런 다음 SO (How to create appending writeStream in 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);
은 ''에 플래그를 변경되었는지와도 데이터를 추가하지 않았다?
감사합니다. 단지 기능 테스트였습니다. 나는 그것을 구현할 때 이러한 오류 상황을 처리 할 것이다. 또한 네, 하나의 파일에 두 개의 디스크립터가있어서 하나를 제거해야만했기 때문에 추가 할 수 없었습니다. – DeadMan
옵션을 사용하면 파일을 올바르게 추가 할 수있었습니다. 번호가 잘못되어 '옵션'에서 대괄호를 제거 했으므로 '모드'를 삭제해야했습니다. – cpres