运行node app.js时Mongoose代码无输出问题求助
排查Mongoose代码无输出问题
以下是导致代码无输出的核心问题及修正方案:
问题点梳理
- 查询函数未执行:你定义了
findDocuments但从未调用它,而且这个函数混用了MongoDB原生驱动写法,和Mongoose的使用逻辑不匹配,还缺少assert模块的引入。 - 异步操作未处理:
fruit.save()是异步操作,Node.js会直接跳过等待执行后续代码,甚至可能在保存完成前就结束进程,自然不会有输出。 - Schema字段拼写错误:
fruitSchema里的ratinn是拼写错误,应该是rating,和创建文档时的字段名不匹配,会导致该字段无法正确存储。 - 未监听数据库连接状态:没有处理MongoDB连接的成功或错误事件,无法确认数据库是否连接成功(比如MongoDB未启动时,连接失败也不会有提示)。
修正后的代码示例
const mongoose = require('mongoose'); const assert = require('assert'); // 监听数据库连接状态 mongoose.connect("mongodb://localhost:27017/fruitsDB", { useNewUrlParser: true }) .then(() => console.log("数据库连接成功")) .catch(err => console.error("数据库连接失败:", err)); // 修正Schema字段拼写错误 const fruitSchema = new mongoose.Schema ({ name: String, rating: Number, review: String }); const Fruit = mongoose.model("Fruit", fruitSchema); // 用async/await处理异步流程,确保操作顺序执行 async function run() { try { // 保存水果文档 const fruit = new Fruit({ name: "Apple", rating: 7, review: "Pretty solid as a fruit." }); await fruit.save(); console.log("水果已保存"); // 使用Mongoose原生查询方法获取数据 const fruits = await Fruit.find({}); console.log("Found the following records"); console.log(fruits); } catch (err) { console.error("操作出错:", err); } finally { // 操作完成后关闭数据库连接,避免进程挂起 await mongoose.connection.close(); } } // 执行异步逻辑 run();
修正说明
- 用Promise处理数据库连接,添加连接成功/失败的提示,方便排查连接问题
- 修正Schema中的字段拼写错误,保证数据存储的正确性
- 使用
async/await统一管理异步操作,确保保存完成后再执行查询 - 改用Mongoose原生的
Fruit.find()查询方法,符合Mongoose的使用规范 - 添加错误捕获逻辑,便于定位执行过程中的问题
- 操作完成后关闭数据库连接,避免Node进程持续挂起
内容的提问来源于stack exchange,提问作者Felix Achiah
相关产品推荐
相关产品推荐

