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

从app.js向choices.js传递数据的最优方案?当前answer变量用法是否合理?

从app.js向choices.js传递信息的最佳实践

你现在通过将数据存入choicesTerm数组,再通过Express的/choices-api接口返回给前端choices.js的方式,其实是前后端分离场景下非常标准且合理的做法,不过我们可以从代码健壮性、可维护性等角度优化这个实现。

现有方案的合理性

  • 这种通过API接口异步获取数据的方式,完美契合前后端分离的架构设计,前端和后端解耦,各自聚焦自身职责(后端处理数据库逻辑,前端负责页面渲染与交互)
  • 使用res.json()返回JSON格式数据,前端用$.getJSON()接收,是通用且成熟的前后端数据交互模式

可优化的方向

1. 重构嵌套回调,避免“回调地狱”

你当前的数据库调用采用嵌套回调的写法,当逻辑复杂时会变得难以阅读和维护。建议改用Promise或async/await来重构:

// 重构后的数据库调用示例
sql.open(connStr)
  .then(conn => conn.procedureMgr())
  .then(pm => pm.callproc('mySP', sessionID))
  .then(() => pm.callproc('mySp2'))
  .then(results => {
    if (results.length) {
      const row = results[0];
      const answers = row.Answers.split("|");
      // 用map替代for循环,更简洁
      choicesTerm = answers.map(ans => ({
        value: ans,
        description: ans,
        question: row.text,
        detail: row.detail
      }));
    }
  })
  .catch(err => {
    console.error('数据库调用出错:', err);
  });

2. 处理数据未就绪的边界情况

当前如果前端在数据库查询完成前请求/choices-api,会拿到空数组。可以通过两种方式优化:

  • 等待数据库查询完成后再启动Express服务,确保接口返回有效数据
  • 在接口中判断数据状态,返回合适的HTTP状态码(比如503 Service Unavailable),前端可以实现重试逻辑

3. 优化数据结构,减少冗余

你现在每个answer对象都重复存储了question和detail(所有选项都属于同一个问题的情况下),可以调整数据结构来减少冗余:

// 后端返回的优化后结构
const responseData = {
  question: row.text,
  detail: row.detail,
  choices: answers.map(ans => ({value: ans, description: ans}))
};
choicesTerm = responseData;

对应的前端choices.js可以更直观地获取数据:

function printTerms(data) {
  const question = data.question;
  const detail = data.detail;
  const choices = data.choices;
  // 后续渲染逻辑
}

4. 统一变量命名规范

JavaScript中推荐使用驼峰命名法,比如choicesTerm可以改为availableChoices,Answers改为answers,让代码更符合行业通用规范,提升可读性。

总结

你当前的实现思路是完全正确的,已经抓住了前后端数据交互的核心逻辑。如果业务场景简单,现有方案足以满足需求;如果未来业务复杂度提升,按照上面的方向优化后,代码会更健壮、更易于维护。

内容的提问来源于stack exchange,提问作者faujong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:50:52