无法启动BrowserQuest服务器:ERR_INVALID_ARG_TYPE参数错误求助
解决BrowserQuest启动时的ERR_INVALID_ARG_TYPE路径错误
从报错信息来看,问题出在server/js/map.js第14行的fs.lstatSync调用——传入的path参数是undefined,导致Node.js抛出类型错误。下面是具体的排查和修复步骤:
1. 定位问题根源
错误栈明确指向Map类的init方法调用fs.lstatSync时参数无效,说明你的代码在初始化地图实例时,没有传入正确的地图目录路径,或者路径变量未正确赋值。
2. 检查main.js中的地图初始化代码
打开server/js/main.js,找到创建Map实例的代码(类似var map = new Map(...)):
- 如果代码里没有传入路径参数(比如
new Map()),那就是问题所在——原项目的Map类需要接收地图目录的路径作为参数。 - 如果传入了相对路径(比如
new Map('./maps')),要确认当前启动服务器的工作目录是否正确:你需要进入server目录再执行node js/main.js,否则相对路径会基于你当前的终端目录,而不是server目录,导致找不到maps文件夹。
3. 修复路径问题(两种方案)
方案一:确保启动时的工作目录正确
在终端中切换到你的BrowserQuest server目录:
cd /var/www/html/games/browserquest/server node js/main.js
方案二:改用绝对路径(更可靠)
修改server/js/main.js,用Node.js的path模块生成绝对路径,避免相对路径的坑:
// 在main.js顶部引入path模块 const path = require('path'); // 替换原来的Map初始化代码 const mapDir = path.resolve(__dirname, '../maps'); // 指向server目录同级的maps文件夹 var map = new Map(mapDir);
4. 验证map.js的构造函数
如果上面的步骤没解决问题,检查server/js/map.js的构造函数是否正确接收并保存了路径参数:
// 确保map.js的构造函数是类似这样的 function Map(path) { this.path = path; // 必须把传入的路径赋值给实例属性 this.init(); }
如果构造函数里没有this.path = path这一行,init方法调用fs.lstatSync(this.path)时自然会得到undefined。
按照上面的步骤排查,应该就能解决这个路径错误了。
内容的提问来源于stack exchange,提问作者iWhimper
相关产品推荐
相关产品推荐

