2015-06-22 64 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文件。 –