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

Next.js + Mongoose(MongoDB)数据库填充报错求助

解决Next.js中Mongoose数据库填充脚本的模块错误问题

问题背景

在Next.js项目中编写Mongoose数据库填充脚本seeder.js,配置package.json命令后运行出现多次模块相关错误,以下是问题代码、配置及对应解决方法:

原始代码与配置

seeder.js 代码:

import Product from '/models/productModel';
import products from '/data/products';
import dbConnect from '/config/dbConnect';

dbConnect();

const seedProducts = async () => {
  try {
    await Product.deleteMany();
    console.log('Products are deleted');

    await Product.insertMany(products);
    console.log('All Products are added.');

    process.exit();
  } catch (error) {
    console.log(error.message);
    process.exit();
  }
};

seedProducts();

package.json 脚本配置:

"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "seeder": "node utils/seeder"
  },

错误1:ES模块语法错误

报错信息

(node:27824) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
C:\Users\tarek\Desktop\Code\utils\seeder.js:1
import Product from '/models/productModel';
^^^^^^

SyntaxError: Cannot use import statement outside a module

解决方法

两种方案二选一:

  1. 将seeder.js重命名为seeder.mjs(后续需同步更新命令);
  2. 在项目根目录的package.json中添加"type": "module"字段,使整个项目默认使用ES模块:
    {
      "type": "module",
      // 其他原有配置...
    }
    

错误2:模块路径找不到(文件后缀未更新)

报错信息

node:internal/modules/cjs/loader:959
  throw err;
  ^

Error: Cannot find module 'C:\Users\tarek\Desktop\Code\utils\seeder'
    at Module._resolveFilename (node:internal/modules/cjs/loader:956:15)
    at Module._load (node:internal/modules/cjs/loader:804:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

解决方法

因为已经将文件改为seeder.mjs,需要更新package.json中的seeder命令,添加文件后缀:

"scripts": {
    // 其他命令...
    "seeder": "node utils/seeder.mjs"
  },

错误3:导入模块路径错误

报错信息

Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\models\productModel' imported from C:\Users\tarek\Desktop\Code\utils\seeder.mjs
at new NodeError (node:internal/errors:387:5)
at finalizeResolution (node:internal/modules/esm/resolve:404:11)
at moduleResolve (node:internal/modules/esm/resolve:965:10)
at defaultResolve (node:internal/modules/esm/resolve:1173:11)
at nextResolve (node:internal/modules/esm/loader:173:28)
at ESMLoader.resolve (node:internal/modules/esm/loader:852:30)    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:439:18)
at ModuleWrap. (node:internal/modules/esm/module_job:76:40)
at link (node:internal/modules/esm/module_job:75:36) {
code: 'ERR_MODULE_NOT_FOUND'
}

解决方法

Node.js的ES模块中,/开头的路径会被解析为系统根目录(如C:\),而非项目根目录。需要将导入路径改为相对路径,并添加完整文件后缀:
假设项目目录结构为:

项目根目录/
├── models/
│   └── productModel.js
├── data/
│   └── products.js
├── config/
│   └── dbConnect.js
└── utils/
    └── seeder.mjs

修改seeder.mjs中的导入路径:

// 从utils目录往上一级到项目根目录,再指向对应文件
import Product from '../models/productModel.js';
import products from '../data/products.js';
import dbConnect from '../config/dbConnect.js';

完成以上修改后,运行npm run seeder即可正常执行数据库填充脚本。

内容的提问来源于stack exchange,提问作者User_T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:57:09