You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:54:26