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

如何用Node.js获取数据库小数?eBay API价格转积分遇NaN问题

问题分析与修复方案

你的代码输出NaN的核心问题出在错误获取汇率值以及冗余的数据库查询上,具体问题点和修复方法如下:

问题点拆解

  1. 错误赋值汇率变量:
    你把connection.query()的返回值(这是一个数据库查询对象,不是查询结果)赋值给了conversionRate,这个对象不是数字类型,执行itemArray[2] / conversionRate时自然会得到NaN。
  2. 冗余的数据库查询:
    已经通过第一个SELECT * FROM Sponsor查询到了赞助商的所有信息,完全没必要再执行一次SELECT PointConversion的重复查询。
  3. 潜在的数值类型问题:
    从数据库取出的PointConversion可能是字符串类型,需要转换为数值后再参与计算。

修复后的代码

request(options, function (error, response) {
  if (error) throw new Error(error);
  var parseItem = JSON.parse(response.body);
  var itemArray = [
    parseItem.itemSummaries[0].image,
    parseItem.itemSummaries[0].title,
    parseItem.itemSummaries[0].price,
    parseItem.itemSummaries[0].itemWebUrl
  ];

  // 处理图片链接逻辑保留
  itemArray[0] = queryString.stringify(itemArray[0]);
  itemArray[0] = itemArray[0].substring(9);
  itemArray[0] = decodeURIComponent(itemArray[0]);

  // 处理商品价格为数值类型
  itemArray[2] = parseFloat(queryString.stringify(itemArray[2]));

  // 只执行一次数据库查询,获取赞助商信息
  connection.query("SELECT * FROM Sponsor WHERE UserId = ?;", [userID], function(error, SponsorInfo, fields) {
    if (error) throw error;
    
    // 检查查询结果是否存在,避免空值报错
    if (!SponsorInfo || SponsorInfo.length === 0) {
      throw new Error("未找到该用户对应的赞助商信息");
    }
    
    // 取出汇率并转换为数值类型
    var conversionRate = parseFloat(SponsorInfo[0].PointConversion);
    
    // 检查汇率是否有效(不能为0或非数字)
    if (isNaN(conversionRate) || conversionRate === 0) {
      throw new Error("无效的积分转换汇率");
    }
    
    // 执行积分转换计算(12.5美元 / 0.01汇率 = 1250积分,符合需求)
    itemArray[2] = itemArray[2] / conversionRate;
    console.log(itemArray[2]);
    
    // 后续跳转逻辑
    response.redirect('/sponsor_catalog');
  });
});

关键修改说明

  • 移除重复查询:直接从第一次查询的SponsorInfo结果中提取PointConversion字段,减少数据库请求开销。
  • 正确获取汇率值:从查询结果数组的第一个元素(UserId应为唯一值)中取出汇率,通过parseFloat转换为数值类型。
  • 增加异常检查:添加查询结果为空、汇率无效的判断,避免后续逻辑出现未知错误。
  • 简化价格处理:把两次字符串处理合并为一行,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:05:21