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
相关产品推荐
相关产品推荐

