initSchemas()函数是应该是创建集合,但是在8-7想导入数据库时却说没有找到相对应

来源:8-7 向数据库导入爬到的电影数据

liongo

2019-05-31

initSchemas()函数是应该是创建集合,但是在8-7想导入数据库时却说没有找到相对应的名字E:\koaDemo\node_modules\mongoose\lib\index.js:452
throw new mongoose.Error.MissingSchemaError(name);
^
MissingSchemaError: Schema hasn’t been registered for model “Movie”.
Use mongoose.model(name, schema)
at new MissingSchemaError (E:\koaDemo\node_modules\mongoose\lib\error\missingSchema.js:22:11)
at Mongoose.model (E:\koaDemo\node_modules\mongoose\lib\index.js:452:13)
at Object. (E:\koaDemo\server\crawler\trailer-list.js:4:25)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions…js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
Error: exit code 1
at ChildProcess.child.on.code (E:\koaDemo\server\tasks\movie_child.js:19:38)
at ChildProcess.emit (events.js:182:13)
at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)

以下是index.js的代码

const Koa = require(‘koa’);
const mongoose = require(‘mongoose’)
const app = new Koa();
// const {normal} = require(’./tpl’);//need to
const views = require(‘koa-views’)//引用koa-views
const {resolve} = require(‘path’)//引用path模块的resolve方法
const {connect,initSchemas} = require(’./database/init’)
//const {connect} = require(’./database/init’)
;(async()=>{
await connect()

 initSchemas()

})()
app.use(views(resolve(__dirname,’./views’),{ //查找绝对路径中的所有后缀名为pug的文件
extension:‘pug’
}))

app.use(async (ctx,next) => {
await ctx.render(‘index’,{
shops:’’,
me:‘tin’
});
});
app.listen(6290);
console.log(‘go go go’);


这是模块 movie.js

const mongoose = require(‘mongoose’)
const Schema = mongoose.Schema//数据模型架构
const {Mixed,ObjectId}= Schema.Types//任意类型

mongoose.set(‘useNewUrlParser’, true)
mongoose.set(‘useFindAndModify’, false)
mongoose.set(‘useCreateIndex’, true)
const movieSchema = new Schema({
doubanId:{
type:String,
required:true,
unique:true
},
category:{
type:ObjectId,
ref:‘Category’ //关联的模型名称
},
rate:Number,
title:String,

summary:String,
video:String,
poster:String,
cover:String,

videoKey:String,
posterKey:String,
coverKey:String,
rawTitle:String,
MovieTypes:[String],//声明一个数组里面的数据是string类型
pubdate:Mixed,//时间日期无类型,可以用mixed混合类型替换
year:Number,
tags:Array,//电影标签分类
meta:{ //数据描述
    createAt:{
        type:Date,
        default:Date.now()
    },
    updateAt:{
        type:Date,
        default:Date.now()
    }
}

})
movieSchema.pre(‘save’,function (next) {
if(this.isNew){
this.meta.createdAt = this.meta.updateAt = Date.now()

}else{
    this.meta.updateAt = Date.now()
}
next()

})

mongoose.model(‘Movie’,movieSchema)//实例化数据模型

写回答

1回答

Scott

2019-06-01

可以把 trailer-list.js 代码贴一下,感觉是代码执行的先后顺序和初始化顺序不对,导致 mongodb 的 schema 还没有初始化好,就去获取了模型 model

0
1
liongo
谢谢老师似乎是没有加连接次数的判断,导致直接连接后没有再次查询所以没初始化好
2019-06-11
共1条回复

Koa2框架从0开始构建预告片网站

Koa2+MongoDB+Parcel+Puppeteer+AntDesign快速搭建预告片网站

751 学习 · 362 问题

查看课程