2017-02-20 5 views
0

私はいくつかのファイルをダウンロードしており、それらをサーバーにプッシュしたいと考えています。ファイルをプッシュしようとするたびにエラーが発生します
エラー:送信後にヘッダーを設定できません。1つのリクエストで複数のJSONリクエストをサーバーに送信するnodejs

私はすべてのファイルを読み込んで解析するforループを持っています。その後、それらを1つずつサーバーに送信します。

app.get('/dataparser', function(req, res) { 
var fs = require('fs'); 
var obj; 
var jsonGis = new Array(); 
var jsonArray; 
var filePaths = []; 
const downloadFolder = './sampletest/'; 
var mtimes = {}; 
var reloadTimes = 10000; 
fs.readdir(downloadFolder, (err, files) => { 
    files.forEach(file => { 
     filePaths.push("sampletest/" + file); 
    }); 
}) 
var execFunction = function() { 
    for (var i = 0; i < filePaths.length; i++) { 
     parseFile(filePaths[i], mtimes[filePaths[i]]); 
    } 
}; 
execFunction(); 
setInterval(execFunction, reloadTimes); 
function parseFile(fileName, lastModifiedTime) { 
    fs.stat(fileName, function(err, fd) { 
      for (var i=0, len = filePaths.length; i<len; i++) { 
       if (fd.mtime !== lastModifiedTime) { 
        mtimes[fileName] = fd.mtime; 
        fs.readFile(filePaths[i], function(err, data) { 
        if (err) { 
         return console.error(err); 
        } 
        obj = JSON.parse(data); 
        jsonGis.push('"Person1"'); 
        jsonGis.push('"' + obj.pages[1].answers[2].values[0] + '"'); 
        jsonGis.push('"person2"'); 
        jsonGis.push('"' + obj.pages[1].answers[0].values[0] + '"'); 
        jsonGis.push('"codewals"'); 
        jsonGis.push('"42343GSDS"'); 
        jsonGis.push('"geometry":{'); 
        jsonGis.push('"x":' + obj.pages[1].answers[4].values[0].coordinates.latitude + ','); 
        jsonGis.push('"y":' + obj.pages[1].answers[4].values[0].coordinates.longitude); 
        var str = "[{ " + jsonGis[0] + jsonGis[1] + jsonGis[2] + ": " + jsonGis[3] + "," + jsonGis[4] + ": " + jsonGis[16] + "}}]" 
        //pushing to the server 
        console.log("check here"); 
        console.log(str); 
        var qs = require("querystring"); 
        var http = require("http"); 
        var options = { 
         "method": "POST", 
         "hostname": "twst2.gtw.com", 
         "port": null, 
         "path": "localpath/", 
         "headers": { 
          "accept": "application/json", 
          "content-type": "application/x-www-form-urlencoded", 
         } 
        }; 
        var req = http.request(options, function(res) { 
         var chunks = []; 

         res.on("data", function(chunk) { 
          chunks.push(chunk); 
         }); 

         res.on("end", function() { 
          var body = Buffer.concat(chunks); 
          console.log(body.toString()); 
         }); 
        }); 
        req.write(qs.stringify({features: str})); 
        res.send("The server was updated"); 
        req.end(); 
        }); 
      } 
     } 
    }); 
}; 

はちょうどようにfile1.jsonからサーバーにデータを送信し、その後file2.json、その後file3.jsonとする必要があります。

答えて

0

.write、.send、および.endを含む別のコールバック関数を作成してから、それを.requestのコールバックにしてみてください。

+0

kinda新しいノードがわからない方法 – Slygoth

+0

@Slygoth - [this site](http://callbackhell.com/)は、コールバックを一般的に説明するうえで、いくつかの実例を持っています。これまでに私が見つけた最高の記事です。ノード固有のリソースもいくつかあります(https://www.tutorialspoint.com/nodejs/nodejs_callbacks_concept.htm) – Michael

+0

マイケルに今すぐチェックしていただきありがとうございます – Slygoth

関連する問題