Express项目执行node app.js后控制台未显示Server Start提示
控制台未显示"Server Start: 3001"的排查与解决
执行node app.js后,控制台未输出预期的"Server Start: 3001"提示,结合你提供的代码,问题主要出在以下几个地方:
一、动态加载控制器的路径错误
在app.js的动态加载控制器代码中,路径拼接缺少了斜杠,导致Node.js无法找到控制器文件,抛出错误后终止代码执行,后续的server.listen和console.log都不会运行:
原错误代码:
fs.readdirSync('./controllers').forEach((file) => { if(file.substr(-3) == ".js") { route = require('./controllers' + file); // 此处缺少斜杠 route.controller(app, io, user_socket_connect_list); } })
修复后:
fs.readdirSync('./controllers').forEach((file) => { if(file.substr(-3) == ".js") { route = require('./controllers/' + file); // 添加斜杠,路径变为 ./controllers/xxx.js route.controller(app, io, user_socket_connect_list); } })
二、原型方法使用箭头函数的潜在问题
你给Array和String原型添加方法时用了箭头函数,箭头函数的this指向不会绑定到当前数组/字符串实例,会导致这些方法无法正常工作,虽然这不是直接导致控制台不输出的原因,但会引发其他潜在bug,需要改成普通函数:
例如:
原错误写法:
Array.prototype.swap = (x,y) => { var b = this[x]; this[x] = this[y]; this[y] = b; return this; }
修复后:
Array.prototype.swap = function(x,y) { var b = this[x]; this[x] = this[y]; this[y] = b; return this; }
同理,insert、replace_null、replaceAll这几个原型方法都需要改成普通函数形式。
三、验证步骤
- 修复上述两个问题后,保存
app.js - 在终端重新执行
node app.js - 如果仍无输出,查看终端的错误提示(Node.js会把报错信息打印在终端,根据提示进一步排查)
内容的提问来源于stack exchange,提问作者Ali Almahoozi
相关产品推荐
相关产品推荐

