使用Node.js的.load加载Mongoose脚本时持续卡顿求助
问题解决:Node终端使用
.load执行Mongoose脚本无限重复打印第一行 原因分析
Node的REPL环境加载脚本时,若脚本存在换行符格式不兼容(比如用了Windows的CRLF而非Unix的LF),或异步操作导致REPL进入异常循环,就会出现第一行内容无限重复打印的情况。
解决步骤
1. 修正脚本换行符格式
将脚本文件的换行符改为Unix格式(LF):
- VS Code中点击右下角的
CRLF标识,选择LF后保存文件; - 其他编辑器可通过设置或格式转换工具调整。
2. 给脚本添加执行完成标识
在脚本末尾添加一行代码,明确告知REPL脚本执行完毕,避免重复解析:
console.log("脚本加载完成,可访问Product模型");
3. 若需在REPL中访问变量的优化方案
把异步连接逻辑包装成自执行函数,确保连接完成后将变量挂载到全局,方便REPL直接调用:
console.log("test"); const mongoose = require("mongoose"); (async function() { try { await mongoose.connect("mongodb://127.0.0.1:27017/shopDB", { useNewUrlParser: true, useUnifiedTopology: true, }); console.log("connection open"); } catch (e) { console.log("ERROR:"); console.log(e); } mongoose.set("strictQuery", false); const productSchema = new mongoose.Schema({ name: { type: String, required: true, maxlength: 20, }, price: { type: Number, required: true, min: [0, "the price cant be negative, unlike the negachin >:)"], }, isOnsale: { type: Boolean, default: false, }, categories: { type: [String], default: ["none"], }, qty: { online: { type: Number, default: 0, }, instore: { type: Number, default: 0, }, }, size: { type: String, enum: ["S", "M", "L"], }, }); productSchema.methods.greet = function (){ console.log("How you doin?"); }; global.Product = mongoose.model("Product", productSchema); console.log("Product模型已在REPL中可用"); })();
4. 替代方案:直接用node命令运行脚本
如果不需要在REPL中实时访问变量,直接执行以下命令运行脚本即可:
node 你的脚本文件名.js
验证方法
修改后重新在Node终端执行.load 你的脚本文件名.js,此时应只打印一次"test",随后输出数据库连接状态,最后提示变量可用,即可正常访问Product模型。
内容的提问来源于stack exchange,提问作者דן שמש
相关产品推荐
相关产品推荐

