Nodejs,Mongoose和Jade没有从数据库中获取数据

时间:2014-06-21 10:21:45

标签: node.js mongodb express mongoose pug

我正在寻找我的问题但是甚至不知道问题出在哪里。

我获得了在我的路线中设置的标题但没有来自数据库的数据......

我的模特:

var mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    ObjectId = Schema.Types.ObjectId;


var blogSchema = new Schema({
  title: { type: String, required: true },
  author: { type: String, required: true },
  body: { type: String, required: true },
  date: { type: String, required: true },
  hidden: Boolean
});


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

我的路由器:

var express = require('express'),
    Blog = require('../models/blog'),
    moment = require('moment');

moment.lang('de');

var router = express.Router();


router.get('/articles', function(req, res) {
    Blog.find(function(err, docs){
        return res.render('blog/articles', { 
            title: 'Blog_',
            articles: docs
        });
    });
}); 

app.use('/blog', router);

我的玉

extends ../layouts/default
include ../elements/form-elements

block content

    h1= title
    each article in articles
        .col-md-12
            div.title= article.title

我在页面上显示的唯一一个是

Blog_

那么我做错了什么?

在错误文件中,它只说:“无法读取未定义的属性'title'

所以文章对象没有设置......但为什么?

非常感谢

编辑1:

将article.title更改为文章不会改变任何内容

日志文件中的

GET /blog/articles HTTP/1.1 304 - - 3 ms

编辑2:

似乎节点没有从db获取任何数据... 是的,有一个testdata集;)

console.log() - >

错误:null

docs:[]

解决方案已发布为答案

2 个答案:

答案 0 :(得分:0)

得到了解决方案......

模型不对......

var blogSchema = new Schema({
  title: { type: String, required: true },
  author: { type: String, required: true },
  body: { type: String, required: true },
  date: { type: String, required: true },
  hidden: Boolean
}, {collection : 'blog'});

必须在最后命名该集合...因为它用小写字母写成 - .-

真是假 - 再也不会这样做了^^

答案 1 :(得分:0)

我知道这是一个非常古老的问题,OP已将其标记为已回答,但我认为真正的问题出现在"我的路由器",您没有引用您的& #34;文档" (正确地从数据库返回的数据)。请记住" docs"是一个数组,所以你需要像这样引用它们:

router.get('/articles', function(req, res) {
    Blog.find(function(err, docs){
        return res.render('blog/articles', { 
            title: docs[0].title, // Get the title for first entry
            articles: docs[0].body // Get body for the first entry
        });
    });
});

我对数组索引进行了硬编码,但您可以使用循环来获取数组中的每个项目。

我认为OP解决方案无法解决问题,因为......

默认情况下,使用以下代码编译模型时

const someModel = mongoose.model('someModel', SomeSchema);

mongoose使用' someModel'创建一个集合。命名并添加" s"最后,所以如果你检查你的数据库,你的收藏应该  显示为“someModels'”。借助OP的解决方案:

{ collection: 'blog' }

作为创建博客架构时的第二个参数

var blogSchema = new Schema();

该默认行为将被覆盖,您的收藏名称将是您设置为收集值的任何内容,在本例中为"博客"。

您可以在Mongoose official docs中详细了解相关信息 或在MDN - Node/Express/Mongoose

中的模型部分