模式尚未注册模型错误显示

Posted

技术标签:

【中文标题】模式尚未注册模型错误显示【英文标题】:schema has not been registered for model error showing 【发布时间】:2019-11-16 21:48:39 【问题描述】:

每当我写这个时,在我的控制器中,

const blogModel = mongoose.model('Blog'),  

它开始显示错误架构尚未注册

我的模型代码/Blog.js

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

let blogSchema = new mongoose.Schema(
    blogId: 
        type: String,
        unique: true
    
 );

module.exports =  mongoose.model('Blog', blogSchema);

我的控制器/blogs.js 的代码 这里我创建了一个 getAllblogs 方法来获取所有博客

    const express = require('express')
    const mongoose = require('mongoose')
    const blogModel = mongoose.model('Blog')

    let getAllBlogs = (req,res) =>
    blogModel.find()
    .select('-_v-_id')
    .lean()
    .exec((err,result) =>
        if(err)
            console.log("error")
            res.send(err)
        
        else if(result == undefined || result == null || result == '')
        
            console.log("no blog found")
            res.send("no blog find")
        
        else
            console.log("blog found")
            res.send(result)
        
    )


module.exports = 
    getAllBlogs:getAllBlogs

这是错误跟踪

C:\Users\dell\basicnode>节点索引.js

C:\Users\dell\basicnode\node_modules\mongoose\lib\index.js:456 抛出新的 mongoose.Error.MissingSchemaError(name); ^ MissingSchemaError: 模式尚未注册模型“./../models/Blog.js”。使用 mongoose.model(name, schema) 在新的 MissingSchemaError (C:\Users\dell\basicnode\node_modules\mongoose\lib \error\missingSchema.js:22:11) 在 Mongoose.model (C:\Users\dell\basicnode\node_modules\mongoose\lib\index.js:456:13) 在对象。 (C:\Users\dell\basicnode\controllers\blogs.js:3:29) 在 Module._compile (internal/modules/cjs/loader.js:701:30) 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10) 在 Module.load (internal/modules/cjs/loader.js:600:32) 在 tryModuleLoad (internal/modules/cjs/loader.js:539:12) 在 Function.Module._load (internal/modules/cjs/loader.js:531:3) 在 Module.require (internal/modules/cjs/loader.js:637:17) 在需要(内部/模块/cjs/helpers.js:22:18) 在对象。 (C:\Users\dell\basicnode\routes\blog.js:3:22) 在 Module._compile (internal/modules/cjs/loader.js:701:30) 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10) 在 Module.load (internal/modules/cjs/loader.js:600:32) 在 tryModuleLoad (internal/modules/cjs/loader.js:539:12) 在 Function.Module._load (internal/modules/cjs/loader.js:531:3)

我的 index.js 的代码

const mongoose = require('mongoose') 
const express = require('express') 
const appConfig = require('./config/appConFig') 
const fs = require('fs') 
const bodyParser = require('body-parser')
 const cookieParser = require('cookie-parser') 
const app = express() app.use(bodyParser.json()) 
app.use(bodyParser.urlencoded(extended:false)) app.use(cookieParser())

let routesPath = './routes'; 
fs.readdirSync(routesPath).forEach(function(file)  
if(-file.indexOf('.js'))
    console.log("finmding the path");
    console.log(routesPath+'/'+file);
    let route = require(routesPath+'/'+file);
    route.setRouter(app);
 );

let modelsPath = './models'; 
fs.readdirSync(modelsPath).forEach(function(file)  
if(-file.indexOf('.js'))

    let route = require(modelsPath+'/'+file);
 );

app.get('/', (req,res) =>  
res.send('hello world i am here');

let db = mongoose.connect(appConfig.db.uri,useMongoClient:true);
) 
mongoose.connection.on('error' , function(err) 
console.log("database connection error")
console.log(err) );

mongoose.connection.on('open' , function(err) 
if(err)

console.log("database connection error")
console.log(err)

else
    console.log("connection success")
 ); app.listen(appConfig.port, () => console.log("listening onn "))

【问题讨论】:

你能分享你导出模型的控制器的代码吗? 张贴@ShubhamSharma 您是否使用 mongoose 设置了与 mongodb 的连接?因为我在您的代码中的任何地方都看不到它,您还需要将您的架构导入到您的控制器中,或者可以直接将模型与猫鼬一起使用。 我已经在我最近发布的@ShubhamSharma 的 index.js 文件中完成了这个连接,我的 git repo 的链接是github.com/vishalprasar/rest-api 【参考方案1】:

model/Blog.js 应该首先需要在 index.js 中。这样 index.js 就会知道 Blog 已加载到猫鼬中。那么你可以在你定义的地方 require controller/blog.js

const blogModel = mongoose.model('Blog')

因为这段代码正在从猫鼬中获取“博客”。

【讨论】:

【参考方案2】:

您已经正确创建和导出了 mongoose 架构....但是您没有正确导入它! 试试这个... const Blog=require("./models/blog.js")。 你错过了'require'关键字......否则一切都很好。 祝你有美好的一天。

【讨论】:

【参考方案3】:

我查看了您的代码并发现了一些问题,因为您已经注册了模型,那么您需要在 controllers/blog.js 中要求它

const blogModel = require('../models/Blog')

在你的models/Blog.js

// importing mongoose module
const mongoose = require('mongoose')
const Schema = mongoose.Schema;

let blogSchema = new Schema(
    
        blogId: 
            type: String,
            unique: true
        ,
        title: 
            type: String,
            default: ''
        ,
        description: 
            type: String,
            default: ''
        ,
        bodyhtml: 
            type: String,
            default: ''
        ,
        views: 
            type: Number,
            default: 0
        ,
        isPublished: 
            type: Boolean,
            default: false
        ,
        category: 
            type: String,
            default: ''
        ,
        author: 
            type: String,
            default: ''
        ,
        tags: [],

        created: 
            type: Date,
            default: Date.now
        , 

        lastModified: 
            type: Date,
            default: Date.now
        
    
);

module.exports =  mongoose.model('Blog', blogSchema);

其次,在您的 index.js 中将您的连接移动到顶部,而不是在路由回调中连接它。

const mongoose = require('mongoose')
const express = require('express')
const appConfig = require('./config/appConFig')
const fs = require('fs')
const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser')
//const mod = require('./models/Blog')
let db = mongoose.connect(appConfig.db.uri,useMongoClient:true);
const app = express()

【讨论】:

【参考方案4】:

尝试从

更改行

const blogModel = mongoose.model('Blog')

const blogModel = require('../model/Blog.js')

在您的 index.js 文件中,将文件顶部的 mongoose.connect 移动到路由之前。

更新:

将你的 index.js 更改为

const mongoose = require("mongoose");
const express = require("express");
const appConfig = require("./config/appConFig");
const fs = require("fs");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
//const mod = require('./models/Blog')
const app = express();

mongoose.connect(appConfig.db.uri, useNewUrlParser: true );

mongoose.connection.on("error", function(err) 
  console.log("database connection error");
  console.log(err);
);

mongoose.connection.on("open", function(err) 
  if (err) 
    console.log("database connection error");
    console.log(err);
   else 
    console.log("connection success");
  
);

app.use(bodyParser.json());
app.use(bodyParser.urlencoded( extended: false ));
app.use(cookieParser());

let routesPath = "./routes";
fs.readdirSync(routesPath).forEach(function(file) 
  if (-file.indexOf(".js")) 
    console.log("finmding the path");
    console.log(routesPath + "/" + file);
    let route = require(routesPath + "/" + file);
    route.setRouter(app);
  
);

let modelsPath = "./models";
fs.readdirSync(modelsPath).forEach(function(file) 
  if (-file.indexOf(".js")) 
    let route = require(modelsPath + "/" + file);
  
);

app.get("/", (req, res) => 
  res.send("hello world i am here");
);

app.listen(appConfig.port, () => console.log("listening onn "));

然后还将您的 blogs.js 控制器更改为

const express = require('express')
const mongoose = require('mongoose')
 const blogModel = require('../models/Blog.js')

let getAllBlogs = (req,res) =>
    blogModel.find()
    .select('-_v-_id')
    .lean()
    .exec((err,result) =>
        if(err)
            console.log("error")
            res.send(err)
        
        else if(result == undefined || result == null || result == '')
        
            console.log("no blog found")
            res.send("no blog find")
        
        else
            console.log("blog found")
            res.send(result)
        
    )



    module.exports = 
        getAllBlogs:getAllBlogs
    

【讨论】:

好的发布@TRomesh 这应该可以,你在这里遇到什么错误? @Vishalsingh 你能发布你的 index.js 文件吗? 是的,发布了@TRomesh,我的 git repo 的链接是github.com/vishalprasar/rest-api @Vishalsingh 很高兴听到这个消息。你可以接受这个作为答案。

以上是关于模式尚未注册模型错误显示的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:尚未为模型“a”注册架构。使用 mongoose.model(name, schema)

尚未为模型“ResourceSchema”注册架构。 - 嵌套js

MissingSchemaError:尚未为模型“用户”注册架构

Mongoose Schema 尚未注册模型

使用oracle中的count函数显示未注册课程的学生

AppDelegate 未提供 UIViewController