Mongoose 模型未定义

Posted

技术标签:

【中文标题】Mongoose 模型未定义【英文标题】:Mongoose Model is not defined 【发布时间】:2019-03-18 21:44:59 【问题描述】:

使用 mongoose 将我的应用程序链接到数据库时,我经常遇到错误:

app.js(服务器):

const express = require('express');
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/nodedb',  useNewUrlParser: true );
let db = mongoose.connection;

db.once('open', () => console.log('connected to MongoDB'));

db.on('error', (err) => console.log(err));

const app = express();

let Article = require('./models/article');

const path = require('path');

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

//create routes
app.get('/', (req, res) => 
    Acticle.find(, (err, articles) => 
        if (err) 
            console.log(err)
         else 
            res.render('index', 
                title: 'Some articles',
                articles: articles
            );
        
    );
);

//start server at the port
app.listen(3000, () => console.log('server is up and listening at the port 3000'));

在上面的文件中我连接了db,连接成功。

在 app.js 中,我引用了我的模型文件 (article.js):

//bring in mongoose
const mongoose = require('mongoose');

//create an article schema
let articleSchema = mongoose.Schema(
    title: 
        type: String,
        required: true
    ,
    author: 
        type: String,
        required: true
    ,
    body: 
        type: String,
        required: true
    
);

let Article = mongoose.model('Article', articleSchema);
module.exports = Article;

当我尝试访问'/'路由时,我得到一个错误

ReferenceError: Acticle 未定义 在 app.get (/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/app.js:43:5) 在 Layer.handle [as handle_request] (/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/layer.js:95:5) 在下一个(/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/route.js:137:13) 在 Route.dispatch (/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/route.js:112:3) 在 Layer.handle [as handle_request] (/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/layer.js:95:5) 在/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/index.js:281:22 在 Function.process_params (/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/index.js:335:12) 在下一个(/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/index.js:275:10) 在 expressInit (/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/middleware/init.js:40:5) 在 Layer.handle [as handle_request] (/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/index.js:317:13) 在/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/index.js:284:7 在 Function.process_params (/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/index.js:335:12) 在下一个(/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/index.js:275:10) 在查询(/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/middleware/query.js:45:5) 在 Layer.handle [as handle_request] (/media/domanski/Domanski/1_Tel Ran/webinars_2018/20181014/nodebase_mongo/node_modules/express/lib/router/layer.js:95:5)

有人知道我做错了什么吗?

【问题讨论】:

你有Acticle的拼写错误。 因为打字错误而标记关闭 是的,伙计们,谢谢,我的错 【参考方案1】:

这里有两个问题,

    app.js 中的错字

Acicle.find() 应该是 Article.find()

    在 article.js(model) 中,您应该使用 new 关键字来定义新的架构。

    让 articleSchema = mongoose.Schema();

应该替换为

let articleSchema = new mongoose.Schema(
    // your schema
);

【讨论】:

【参考方案2】:

你有拼写错误。

Acticle.find(, (err, articles) => );

应该是

Article.find(, (err, articles) => );

【讨论】:

以上是关于Mongoose 模型未定义的主要内容,如果未能解决你的问题,请参考以下文章

查询未在 Mongoose 模型中定义的文档

angularJS + mongoose:TypeError:无法读取未定义的属性“模型”

使用 Mongoose.js 保存模型时,为啥会出现“无法调用未定义的 doValidate”?

使用 Mongoose.js 保存模型时,为啥会出现“无法调用未定义的 doValidate”?

Mongoose CastError:模型“Post”的路径“_id”处的值“未定义”转换为 ObjectId 失败

Mongoose 可选嵌套属性 - 检查空/未定义?