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

Node.js中变量跨文件导出与读取出现undefined问题求助

问题排查与解决方法

可能的原因及对应方案

1. 文件名大小写不匹配(区分大小写系统)

你的导出文件是Products.js,但导入时用了require("./products"),在Linux、macOS这类区分文件名大小写的系统中,这会导致模块加载失败,products变量实际为undefined。

  • 解决:统一文件名大小写,比如将导入语句改为require("./Products"),或者把文件名改成products.js。

2. clientChoice的值无效

如果clientChoice不是有效的数组索引(比如值为4、非数字、负数),那么products.products[clientChoice]会返回undefined,访问它的name和price自然也是undefined。

  • 解决:先验证clientChoice的合法性:
    // 在Main.js中添加验证逻辑
    const products = require("./Products");
    if (typeof clientChoice !== 'number' || clientChoice < 0 || clientChoice >= products.products.length) {
      console.log('无效的选择,请输入0到3之间的数字');
    } else {
      console.log(products.products[clientChoice].name);
      console.log(products.products[clientChoice].price);
    }
    

3. 简化导出导入逻辑(避免嵌套层级出错)

当前导出方式需要通过products.products访问数组,容易混淆。可以简化:

  • 修改Products.js的导出:
    var products = [{
        name: "Nome: Headphones Audio Technica",
        price: "Preço: 169, 99€",
    },
    {
        name: "Nome: Teclado Logitech G512",
        price: "Preço: 98, 99€",
    },
    {
        name: "Nome: iPhone 11 128GB",
        price: "Preço: 579, 99€",
    },
    {
        name: "Nome: Xiaomi Redmi Buds 3 Pro",
        price: "Preço: 50, 99€",
    }];
    
    module.exports = products;
    
  • 然后在Main.js中导入并使用:
    const products = require("./Products");
    if (clientChoice >= 0 && clientChoice < products.length) {
      console.log(products[clientChoice].name);
      console.log(products[clientChoice].price);
    } else {
      console.log('选择的产品不存在');
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:30:52