如何使用Azure function-Node.js读取Json文件

时间:2017-03-03 12:04:19

标签: json node.js azure azure-functions

我创建了一个Azure时间触发器功能,我想和他一起阅读一个Json文件。我确实安装了read-json和jsonfile包并尝试了两者,但它没有用。这是一个示例函数

module.exports = function (context, myTimer) {
   var timeStamp = new Date().toISOString();
   var readJSON = require("read-json");

    readJSON('./publishDate.json', function(error, manifest){
        context.log(manifest.published);
    });
    context.log('Node.js timer trigger function ran!', timeStamp);
    context.done();    
};

这是错误:

TypeError: Cannot read property 'published' of undefined
    at D:\home\site\wwwroot\TimerTriggerJS1\index.js:8:29
    at ReadFileContext.callback (D:\home\node_modules\read-json\index.js:14:22)
    at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:365:13).

Json文件与index.js位于同一文件夹中。我假设发生此错误是因为路径'./publishDate.json',如果是这样,我应该如何键入有效路径?

3 个答案:

答案 0 :(得分:7)

这是一个使用内置fs模块的工作示例:

var fs = require('fs');

module.exports = function (context, input) {
    var path = __dirname + '//test.json';
    fs.readFile(path, 'utf8', function (err, data) {
        if (err) {
            context.log.error(err);
            context.done(err);
        }

        var result = JSON.parse(data);
        context.log(result.name);
        context.done();
    });
}

请注意使用__dirname获取当前工作目录。

答案 1 :(得分:3)

比@ mathewc更快捷。 NodeJS允许您直接require json文件而无需显式读取 - >解析步骤也没有异步回调。所以:

var result = require(__dirname + '//test.json');

答案 2 :(得分:1)

根据此 github issue__dirname 的用法现在无法使用,因此根据相同的 wiki 使用更新用法更新来自 @mathewc 的代码问题。

__dirname 替换为 context.executionContext.functionDirectory

var fs = require('fs');

module.exports = function (context, input) {
    var path = context.executionContext.functionDirectory + '//test.json';
    fs.readFile(path, 'utf8', function (err, data) {
        if (err) {
            context.log.error(err);
            context.done(err);
        }

        var result = JSON.parse(data);
        context.log(result.name);
        context.done();
    });
}