2014-06-21 94 views
0

我正在尋找我的問題,但即使不知道問題出在哪裏。Nodejs,Mongoose和Jade沒有從數據庫中獲得數據

我得到它在我的路線設置標題,但沒有從數據庫中的數據...

我的模型:

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 

the只有一個我在頁面顯示是

Blog_ 

所以我做錯了什麼?

在錯誤的文件,只說:「不能讀取屬性‘標題’的未定義」

所以文章對象未設置......但是爲什麼呢?

非常感謝

編輯1:

變化article.title第不會改變任何東西在日誌文件中

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

編輯2 :

似乎節點犯規從數據庫獲取任何數據... 和是有一個TESTDATA集;)

的console.log() - >

錯誤:空

文檔: []

的解決辦法是張貼答案

+0

模型部分,你可以改變'article.title'到'article'玉石用於測試目的?我懷疑'article'是未定義的,因此解釋了你的錯誤信息。 – alandarev

+0

嘗試''console.log(docs)'在那裏。我知道沒有標準,但是你已經在我希望的地方發佈了'.connect'。 –

回答

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'}); 

有名字在最後集合......導致其寫在小字母-.-

什麼錯誤的 - 從來沒有做到這一點再次^^

0

我知道這是一個非常古老的問題,它的OP作爲回答標記,但我認爲真正的問題是在「我的路由器」,你沒有引用你的「文檔」(數據返回從數據庫中)正確。請記住,「文檔」是一個數組,所以你需要這樣引用它們:

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); 

貓鼬創建使用「someModel的名字並添加」集合s「,所以如果你檢查你的數據庫,你的集合應該是 顯示爲'someModels'。隨着OP的解決方案:

{ collection: 'blog' } 

作爲第二個參數創建博客模式

var blogSchema = new Schema(); 

默認行爲是覆蓋和您的收藏的名字會被你設置爲收藏價值,在當這種情況下,「博客」。

你可以閱讀更多關於它在Mongoose official docs 或在MDN - Node/Express/Mongoose