Node.js新手求助:Sequelize导出site_settings表值后访问返回undefined
解决Sequelize导出site_settings表值后访问undefined的问题
原代码存在的问题
getSiteData函数未添加async关键字,直接使用await会触发语法错误,且函数执行后返回的是Promise对象,而非最终的配置对象- 全局变量
arrResult会导致多次调用时数据重复累积,存在污染风险 - 直接导出
getSiteData()的执行结果,本质是导出了一个Promise,而非解析后的配置对象,因此访问obj.SITE_TITLE会返回undefined
修正方案一:导出异步函数,调用时await获取结果
// assets.config.js const sequelizeConn = require("./database"); async function getSiteData() { try { // 解构获取查询结果数组 const [data] = await sequelizeConn.query("SELECT * FROM `site_settings`"); const settings = {}; data.forEach(res => { settings[res.setting_title] = res.setting_value; }); return settings; } catch (err) { console.error("获取站点配置失败:", err); throw err; // 抛出错误供调用方处理 } } module.exports.getSiteData = getSiteData;
在其他文件中使用:
const { getSiteData } = require("./app/config/assets.config"); // 必须在async函数内使用await async function initApp() { const siteConfig = await getSiteData(); console.log(siteConfig.SITE_TITLE); // 正常输出配置值 } initApp();
修正方案二:模块加载时预加载配置,导出Promise对象
如果希望模块加载时就完成查询,可使用立即执行异步函数:
// assets.config.js const sequelizeConn = require("./database"); // 立即执行异步函数,返回Promise const siteData = (async () => { try { const [data] = await sequelizeConn.query("SELECT * FROM `site_settings`"); const settings = {}; data.forEach(res => { settings[res.setting_title] = res.setting_value; }); return settings; } catch (err) { console.error("获取站点配置失败:", err); throw err; } })(); module.exports.siteData = siteData;
在其他文件中使用:
const { siteData } = require("./app/config/assets.config"); // 通过then获取解析后的配置对象 siteData.then(siteConfig => { console.log(siteConfig.SITE_TITLE); // 正常输出配置值 }).catch(err => { console.error(err); });
内容的提问来源于stack exchange,提问作者user3370096
相关产品推荐
相关产品推荐

