You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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,提问作者דן שמש

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:40:30