Schema hasn't been registered for model "fruit"

问题描述

  1. mongoose 创建数据库,想把

    • 链接数据库文件 (database.js) ,
    • 定义 Schema 逻辑文件,(schema.js)
    • 操作数据逻辑文件test.js 分开

但是报错,说 schema 未注册

问题出现的环境背景及自己尝试过哪些方法

  1. 我所有代码全部写在一个文件里面是可以插入成功的,但是分开多个文件就是不行

相关代码

# /index.js 入口

const { connect, initSchema } = require('./database');
(async () => {
  await connect();
  initSchema();
})();
#/database.js
var mongoose = require('mongoose');
var { resolve } = require('path');

exports.connect = () => {
  return new Promise((resolve, reject) => {
    mongoose.connect('mongodb://localhost:27017/test');

    mongoose.connection.on('open', () => {
      resolve();
      console.log('链接数据库');
    });
  });
};

exports.initSchema = () => {
  require(resolve(__dirname, './schema.js'));
};
# /schema.js
var mongoose = require('mongoose');

let Schema = mongoose.Schema({
  category: String,
  name: String
});

mongoose.model('fruit', Schema);
# /test.js 操作文件
var mongoose = require('mongoose');
let Model = mongoose.model('fruit');

//生成一个document
let apple = new Model({
  category: 'tt',
  name: 'tt'
});
console.log(apple);
//存放数据
apple.save((err, apple) => {
  if (err) return console.log(err);
  console.log(apple);
});

你期待的结果是什么?实际看到的错误信息又是什么?

报错信息

clipboard.png

  • 想知道为什么未注册,里面的加载顺序是怎样的?
阅读 3.6k
2 个回答

初始化数据库,建立 schema 和 test脚本需要放在一个文件里执行就好了

clipboard.png

mongoose不是单例吧,你test里的和其他文件的是不一样的吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题