我正在寻找我的问题但是甚至不知道问题出在哪里。
我获得了在我的路线中设置的标题但没有来自数据库的数据......
我的模特:
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:[]
解决方案已发布为答案
答案 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
中的模型部分