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

数据库种子数据导入报错TypeError: seed is not a function求助

旅行者网站种子数据导入报错排查

报错信息:

TypeError: seed is not a function
at main (C:\Users\marce\src\travlr\app_server\models\db.js:30:11)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
C:\Users\marce\src\travlr\node_modules\mongoose\lib\connection.js:972
throw new MongooseError('Connection.prototype.close() no longer accepts a callback');

问题1:seed is not a function 错误

你的seed.js存在两个致命问题:

  • 导出语句位置错误:module.exports = { seed };被写在seed函数内部,导致只有函数执行后才会触发导出,但db.js在加载时就会require('./seed'),此时导出内容为undefined,解构出来的seed自然不是函数。
  • 路径变量拼写错误:_dirname少了一个下划线,正确写法是__dirname(双下划线),否则会找不到trips.json文件路径。

修复后的seed.js代码:

const fs = require('fs');
const path = require('path');
const mongoose = require('mongoose');

const seed = async function() {
    // Seed TRIPS 
    const trips = JSON.parse(fs.readFileSync(path.join(__dirname, '../../data/trips.json'), 'utf8'));
    const trip = mongoose.model('trips');
    await trip.deleteMany();
    await trip.insertMany(trips);
}

// 将导出语句移到函数外部,确保模块加载时就能导出seed函数
module.exports = { seed };

问题2:Connection.prototype.close() no longer accepts a callback 错误

Mongoose 6及以上版本废弃了connection.close()的回调参数,必须使用Promise/async-await风格处理。你的gracefulShutdown函数用了回调写法,所以触发报错。

修改后的gracefulShutdown函数:

// 改为异步函数,用await处理连接关闭
const gracefulShutdown = async (msg, callback) => {
    await mongoose.connection.close();
    console.log(`Mongoose disconnected due to ${msg}`);
    callback();
}

另外,你提到安装了seedgoose,但当前代码是自定义的种子数据逻辑,并未使用该包,所以这个依赖对你的项目没有作用,可以选择卸载或忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:47:36