2014-12-12 47 views
1

我正在建立一個網站與NodeJS要求數據文件上傳,然後我必須檢查和(如果需要)轉換此文件的內容。轉換文件全內容nodejs

源文件是一個JSON或XML配置文件,我只需要確保其內容格式良好的應用程序的其餘部分。

我在想什麼是檢查全局文件內容的最佳方法。

我平時操作與數據流文件,但我不知道它讓我做我想做的......

源文件具有類似的格式:

{ 
    "parameters": [{ 
     "name": "name", 
     "settings": { 
      "key": "value" 
     } 
    }], 
    "data": [{ 
     "id": "1", 
     "label": "label 1", 
    }, { 
     "id": "2", 
     "label": "label 2" 
    }] 
} 

我需要什麼要做的是解析文件的內容,並檢查文件格式是否好; 文件,否則轉化爲良好的格式之一:

// Read the file content 

var parameters = [], 
    data = [], 
    p = parameters.length, 
    d = data.length; 

// Loop on the parameters, and check the format 
while (p--) { 
    var parameter = parameters[p]; 

    if (name in parameter && typeof parameter.name == "string") { 
     // Add several rules 

     parameters.push(parameter); 
    } 
} 

// Do a similar control for "data". 

// Then save the well-formatted parameters and data into a file 

是,上傳的文件可能會很大...... 我可以執行它變換流的東西?因爲我需要檢查文件的全部內容作爲對象! 例如,我怎樣才能確定流轉換器不會只給出一部分數據?

回答

1

我第一次嘗試這樣的事:

var fs = require('fs'); 

try { 
    var inputFile = require('./config.json'); 
} catch (e) { 
    console.log(e.message); // Do proper error handling. 
} 

// Loop on the parameters, and check the format 
if (!'parameters' in inputFile) { 
    console.log("Got a problem here!"); 
} 

var parameters = []; 
var p = inputFile['parameters'].length; 

while(p--) { 
    var parameter = inputFile['parameters'][p]; 

    if ('name' in parameter && typeof parameter.name == 'string') { 
     // Add several rules 
     parameters.push(parameter); 
    } 
} 

// Do a similar control for "data". 
var data = inputFile['data']; 
// More code needed here... 

// Then save the well-formatted parameters and data into a file 
fs.writeFileSync('./data.json', JSON.stringify({parameters: parameters, data: data}, null, 4) , 'utf-8'); 

如果你面對的是無法放入內存龐大的文件,您已經有了一個巨大的更艱鉅的任務在你前面。通常,您不能保證部分讀取會爲您提供足夠的JSON來解析任何內容(例如{"data": ["<FOUR PETABYTE STRING>"]})。

+0

文件讀取,而不是流......我擔心這是一個限制,但我會通知用戶有關它,我不認爲任何人有一個<四個字母串>。否則我無法幫助他:) – 2014-12-15 17:32:00

+0

順便說一下,使用「require」而不是NodeJS文件系統的興趣是什麼? – 2014-12-15 17:32:55

+1

.json文件中的require需要將文件讀取和JSON解析合併爲一個命令。請記住它會緩存結果,因此在更改該文件時需要重新啓動服務器。 – 2014-12-16 01:13:45