每当我写此代码时,在我的控制器中
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 "))
答案 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')
因为此代码正在从猫鼬中获取“博客”。