如何在NodeJS编写的Azure Function中读取同目录下的JSON配置文件
问题根因
你遇到的异常是两个原因共同导致的:
fs.readFile是异步回调方法,回调函数内部的return值不会赋值给外层的configAPI变量,默认调用fs.readFile的返回值是undefined- 你没有等待文件读取完成就直接执行了后续的循环和打印逻辑,此时文件还没读取完毕,变量自然没有值
修正方案
你可以直接改用同步读取方法,或者使用Promise版本的异步读取加await等待,以下是两种可行的写法:
写法1:使用同步读取(最简便,适合小配置文件场景)
module.exports = async function (context, req) { const fs = require('fs'); const path = require('path').join(context.executionContext.functionDirectory, 'configAPI.json'); let configAPI; try { const data = fs.readFileSync(path, 'utf-8'); configAPI = JSON.parse(data); } catch (err) { context.log('读取配置文件失败:', err); // 可在这里补充异常返回逻辑 return; } for (let file_index=0; file_index < configAPI.length; file_index++){ // 执行业务逻辑 } context.log(configAPI); }
写法2:使用Promise版异步读取加await
module.exports = async function (context, req) { const fs = require('fs').promises; const path = require('path').join(context.executionContext.functionDirectory, 'configAPI.json'); let configAPI; try { const data = await fs.readFile(path, 'utf-8'); configAPI = JSON.parse(data); } catch (err) { context.log('读取配置文件失败:', err); // 可在这里补充异常返回逻辑 return; } for (let file_index=0; file_index < configAPI.length; file_index++){ // 执行业务逻辑 } context.log(configAPI); }
额外优化点:用
path.join拼接路径替代手动写斜杠,避免不同操作系统路径格式不兼容的问题
内容的提问来源于stack exchange,提问作者abautista
相关产品推荐
相关产品推荐

