模式尚未注册,无法显示模型错误

时间:2019-07-06 19:14:02

标签: node.js express mongoose

每当我写此代码时,在我的控制器中

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);
我的controller / 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>节点index.js

     

C:\ Users \ dell \ basicnode \ node_modules \ mongoose \ lib \ index.js:456         抛出新的mongoose.Error.MissingSchemaError(name);         ^ MissingSchemaError:尚未为模型“ ./../models/Blog.js”注册模式。使用mongoose.model(名称,模式)       在新的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.j s:456:13)       在对象。 (C:\ Users \ dell \ basicnode \ controllers \ blogs.js:3:29)       在Module._compile(内部/模块/cjs/loader.js:701:30)       在Object.Module._extensions..js(内部/模块/cjs/loader.js:712:10)       在Module.load(internal / modules / cjs / loader.js:600:32)       在tryModuleLoad(内部/模块/cjs/loader.js:539:12)       在Function.Module._load(内部/模块/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(内部/模块/cjs/loader.js:701:30)       在Object.Module._extensions..js(内部/模块/cjs/loader.js:712:10)       在Module.load(internal / modules / cjs / loader.js:600:32)       在tryModuleLoad(内部/模块/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 "))

5 个答案:

答案 0 :(得分:1)

尝试从

更改行

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
    }

答案 1 :(得分:0)

我已经检查了您的代码,发现很少的问题,因为您已经注册了Model,那么您需要在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()

答案 2 :(得分:0)

数据库模型是一种逻辑结构。在您的模型中,您只是创建了一个没有逻辑(即模式)的模型名称。型号名称应始终以大写字母开头。

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

您无需输入以下内容:

const Schema = mongoose.Schema;

始终将模型保留在models文件夹中。

models / blog.js

const mongoose=require("mongoose")

const blogSchema = new mongoose.Schema({
    blogId: {
        type: String,
        unique: true
    }
 });
const Blog = mongoose.model('Blog',blogSchema),

module.exports=Blog

controller / blogs.js

const Blog=require("./models/blog.js")//whatever path in your app

答案 3 :(得分:0)

您已经正确创建和导出了猫鼬模式。...但是您没有正确导入它!  试试这个... const Blog = require(“ ./ models / blog.js”)。 您错过了'require'关键字...其他一切都很好。 祝你有美好的一天。

答案 4 :(得分:0)

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

const blogModel = mongoose.model('Blog')

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