схема не была зарегистрирована для показа ошибки модели - PullRequest
0 голосов
/ 06 июля 2019

в моем контроллере всякий раз, когда я пишу это,

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> узел index.js

C: \ Users \ dell \ basicnode \ node_modules \ mongoose \ lib \ index.js: 456 throw new 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.js: 456: 13) в объекте.(C: \ Users \ dell \ basicnode \ controllers \ blogs.js: 3: 29) в Module._compile (внутренний / modules / cjs / loader.js: 701: 30) в Object.Module._extensions..js (внутренний/modules/cjs/loader.js:712:10) в Module.load (внутренний / modules / cjs / loader.js: 600: 32) в tryModuleLoad (внутренний / modules / cjs / loader.js: 539: 12) вФункция.Module._load (внутренняя / modules / cjs / loader.js: 531: 3) в Module.require (внутренняя / modules / cjs / loader.js: 637: 17) по требованию (внутренняя / modules / cjs / helpers).js: 22: 18) в Объекте.(C: \ Users \ dell \ basicnode \ router \ blog.js: 3: 22) в Module._compile (внутренний / modules / cjs / loader.js: 701: 30) в Object.Module._extensions..js (внутренний/modules/cjs/loader.js:712:10) в Module.load (внутренний / modules / cjs / loader.js: 600: 32) в tryModuleLoad (внутренний / modules / cjs / loader.js: 539: 12) вFunction.Module._load (внутренний / 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 "))

Ответы [ 3 ]

1 голос
/ 07 июля 2019

Попробуйте изменить строку с

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
    }
0 голосов
/ 08 июля 2019

Модель базы данных представляет собой логическую структуру. в вашей модели вы только что создали имя модели без логики, которой является схема. Название модели всегда должно начинаться с заглавной буквы.

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

вам не нужно вводить это:

const Schema = mongoose.Schema;

всегда храните ваши модели в папке моделей.

Модели / 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

Контроллер / blogs.js

const Blog=require("./models/blog.js")//whatever path in your app
0 голосов
/ 07 июля 2019

Я просмотрел ваш код и обнаружил несколько проблем, так как вы уже зарегистрировали модель, тогда вам нужно будет указать ее в своем 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...