gpt4 book ai didi

javascript - mongodb 文章.长度未定义

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:59 27 4
gpt4 key购买 nike

我正在用jade构建一个nodejs、express、mongodb博客。

我的文件夹结构是:项目/ 模块/ 观点/ 索引.jade 应用程序.js 文章提供者内存.js 文章provider-mongodb.js

当我通过控制台运行 Node app.js 并转到本地主机端口时,我收到 TypeError:

无法在jade.debug.unshift.lineno处读取未定义的属性“长度”...

在浏览器中。可能指的是匿名函数。

这是 Articleprovider-memory.js

ArticleProvider.prototype.save = function(articles, callback) {
var article = null;

if( typeof(articles.length)=="undefined")
articles = [articles];

for( var i =0;i< articles.length;i++ ) {
article = articles[i];
article._id = articleCounter++;
article.created_at = new Date();

this.dummyData[this.dummyData.length]= article;
}
callback(null, articles);
};

/* Lets bootstrap with dummy data */
new ArticleProvider().save([
{title: 'Post one', body: 'Body one', comments:[{author:'Bob', comment:'I love it'}, {author:'Dave', comment:'This is rubbish!'}]},
{title: 'Post two', body: 'Body two'},
{title: 'Post three', body: 'Body three'}
], function(error, articles){});

exports.ArticleProvider = ArticleProvider;

文章提供者-mongodb.js

ArticleProvider = function(host, port) {
this.db= new Db('node-mongo-blog', new Server(host, port, {auto_reconnect: true}, {}));
this.db.open(function(){});
};

ArticleProvider.prototype.save = function(articles, callback) {
this.getCollection(function(error, article_collection) {
if( error ) callback(error)
else {
if( typeof(articles.length)=="undefined")
articles = [articles];

for( var i =0;i< articles.length;i++ ) {
article = articles[i];
article.created_at = new Date();
}

article_collection.insert(articles, function() {
callback(null, articles);
});
}
});
};

exports.ArticleProvider = ArticleProvider;

这是我的路线:

var articleProvider = new ArticleProvider('localhost', 27017);

app.get('/', function(req, res){
articleProvider.findAll( function(error,docs){
res.render('index.jade', {title: 'Blog', articles:docs});
})
res.render('index.jade')
});

然后是index.jade文件

// extends layout

block content
h1= title
#articles
- each article in articles
div.article
div.created_at= article.created_at
div.title
a(href="/blog/"+article._id.toHexString())!= article.title
div.body= article.body

我已经阅读了很多有关所有依赖项的内容,但对它们仍然很陌生。据我所知,这些都可能是问题所在,如果我是对的,请告诉我详细的补救措施。

  1. 我的index.jade代码不正确

  2. index.jade 引用的是一个数组,而我的 posts 对象不是一个数组

  3. mongodb 未与应用程序建立正确的连接

  4. 我需要使用和尚,但我没有

我的一些代码来自这篇文章 http://howtonode.org/express-mongodb

提前谢谢

最佳答案

1。修复快速路线

您的路线有多个 render 调用。应修改为。

app.get('/', function(req, res){    
articleProvider.findAll( function(error,docs){
res.render('index.jade', {title: 'Blog', articles:docs});
})
});

2。在循环之前检查articles是否在jade View 中定义

在遍历articles数组之前,请确保在jade View 中已经定义了它。

block content
h1= title
#articles
- if(typeof(article) !== 'undefined')
- each article in articles
div.article
div.created_at= article.created_at
div.title
a(href="/blog/"+article._id.toHexString())!= article.title
div.body= article.body

3。处理mongo查询中的错误参数

您还考虑了回调中可用的error 变量。这样,如果在查询 mongo 时发生任何错误,那么就可以处理。喜欢

app.get('/', function(req, res){    
articleProvider.findAll( function(error,docs){

if(error) {
console.log("mongo db error"+error);
docs = [];
}

res.render('index.jade', {title: 'Blog', articles:docs});

})
});

关于javascript - mongodb 文章.长度未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19876435/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com