2015-06-22 100 views
0

我有一個簡單的node.js服務,我對jsonSchema中定義的模式執行一些json驗證。該服務如下所示:如何閱讀我的node.js應用程序中的json文件?

app.post('/*', function (req, res) { 
     var isvalid = require('isvalid'); 
     var validJson=true; 
     var schema = require('./schema.json') 
     isvalid(req.body,schema 
      , function(err, validObj) { 
       if (!validObj) { 
        validJson = false; 
       } 
       handleRequest(validJson,res,err,req); 
      }); 
}) 

嘗試在上面的第4行中使用直接require語句。這會產生一個錯誤:

SyntaxError: c:\heroku\nodejs_paperwork\schema.json: Unexpected token t 

這是我schema.json:

{ 
    type: Object, 
    "schema": { 
    "totalRecords": { 
     type: String 
    }, 
    "skip": { 
     type: Number 
    }, 
    "take": { 
     type: Number 
    } 
} 
+0

參見[使用Node.js的如何讀取一個JSON對象(http://stackoverflow.com/questions/10011011/using-node-js-how-do-i-read-a -json-object-into-server-memory) – Carpetfizz

+0

你可以在技術上要求它現在看到[這裏](http://stackoverflow.com/questions/7163061/is-there-a-require-for-json-in-node -js)。不確定哪個是首選。 – aug

+0

您的文本無效JSON。鍵和值必須放在引號中,例如:'「type」:「Object」' –

回答

1

您可能忽略了。您可以使用require聲明加載並解析它。

var jsonData = require('/path/to/yourfile.json'); 

然而,從上述方法的輸出緩存,一旦您更新了JSON文件,並要求再次加載它,它加載從緩存中的內容。如果存儲架構的JSON文件沒有經常更改,則此方法可能會有用。

如果您想每次從磁盤加載JSON文件,而不是從緩存中加載。使用fs

var fs = require('fs'); 

fs.readFile(filepath, 'utf8', function (err, data) { 
    if (err) { 
    // handle error 
    return; 
    } 

    jsonData = JSON.parse(data); 
}); 
+0

我試圖使用直接require語句,但生成一個錯誤見上文。 – Pindakaas

+2

您沒有有效的JSON,所有鍵應該用雙引號引起來,並且JavaScript構造函數不是有效的值。 – adeneo

+0

@Pindakaas更好的你可以嘗試jslint來驗證你的JSON內容,糾正錯誤並更新你的JSON文件。 –