为何Mongoose连接晚于端口监听执行?前置连接仍先输出监听日志?
问题原因解析
这是因为Mongoose的数据库连接是异步操作,而端口监听是几乎即时完成的操作,两者的执行时序由各自的耗时决定,而非代码书写顺序。
具体来说:
- 当你调用
mongoose.connect()时,它会在后台发起数据库连接请求,这个过程需要完成TCP握手、数据库身份验证等步骤,耗时相对较长。在连接完成前,Node.js会继续执行后续代码,不会等待这个操作结束。 - 而
app.listen()启动端口监听的过程非常快,只是通知操作系统开启指定端口的监听,几乎瞬间就能完成,所以它的回调函数会先被触发,对应的日志也就先出现在控制台。
举个典型的代码示例:
// Mongoose连接(异步,耗时较长) mongoose.connect('mongodb://localhost:27017/testdb') .then(() => console.log('Mongoose 连接成功')) .catch(err => console.error('连接失败', err)); // 端口监听(快速完成) app.listen(3000, () => { console.log('服务器已在 3000 端口监听'); });
简单总结:异步操作的回调执行顺序不看代码写在前面还是后面,只看哪个操作先做完。数据库连接比端口监听慢,所以端口监听的日志先输出。
内容的提问来源于stack exchange,提问作者Ashish
相关产品推荐
相关产品推荐

