2016-06-22 26 views
0

我知道這被問了很多次,但我找不到任何代碼,所以我添加了我的輸出。請看一下。使用NODE以JSON格式保存數據

app.put('/hotel/save', function(req, res) { 

    var fileToSave = 'savedHotelDetails.txt'; 
    res.send('Booking Id '+guid()); 
    res.status(200); 
    var arr = []; 
    var k; 
    fs.readFile(fileToSave, 'utf-8', function(err, data) { 
     if(err) { 
      k = []; 
     } else { 
      arr.push(data); 
      var obj = JSON.parse(req.query.params); 
      console.log(obj); 
      k = arr.push(obj); 
      //JSON.stringify(k); 
      //console.log(arr); 
      fs.appendFile(fileToSave, JSON.stringify(arr),'utf8'); 
     } 
    }) 
}); 

這給了我作爲

["",{"hotelId":"IM50003"}]["[\"\",{\"hotelId\":\"IM50003\"}]",{"hotelId":"IB50002"}]["[\"\",{\"hotelId\":\"IM50003\"}][\"[\\\"\\\",{\\\"hotelId\\\":\\\"IM50003\\\"}]\",{\"hotelId\":\"IB50002\"}]",{"hotelId":"IB50002"}] 

首先爲什麼這種輸出的輸出? Secondaly,我的目標是讓來自新數據前結束通話,並希望它獲得追加像

[{"ID": "IM5004"},{"ID": "IM5005"},{"ID": "IM5006"}] 

上述數據應該是後三個電話。

回答

1

問題是您正在讀取文件內容並將其推送到數組並將新對象添加到數組中。使用的file.write代替file.append

即代替

fs.appendFile(fileToSave, JSON.stringify(arr),'utf8'); 

使用

fs.write(fileToSave, JSON.stringify(arr),someCallbackfn) 
+0

任何 「乾淨」 的方式來做到這一點? –

+0

'json'只是一個序列化技術,如果你想要持久化然後嘗試存儲在數據庫(mongo,json-file-store)中或者在你的情況下使用'.csv'格式,這樣你就可以簡單地追加額外的記錄性能損失很大。參考這個http://stackoverflow.com/questions/24011343/nodejs-append-inside-json-file-in-array-format – shadowfox