数据库种子数据导入报错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
相关产品推荐
相关产品推荐

