Tôi đang xây dựng một blog nodejs, express, mongodb bằng ngọc bích.
Cấu trúc thư mục của tôi là: dự án/mô-đun/lượt xem/index.jade-application.js bài viết-provider-memory.js bài viết-provider-mongodb.js
Khi tôi chạy Node app.js thông qua bảng điều khiển và truy cập cổng localhost, tôi nhận được TypeError:
Không thể đọc thuộc tính 'độ dài' không xác định tại Jade.debug.unshift.lineno...
trong trình duyệt. Có lẽ đề cập đến các chức năng ẩn danh.
Đây là Articleprovider-memory.js
ArticleProvider.prototype.save = function(bài viết, gọi lại) {
bài viết var = null;
if( typeof(articles.length)=="không xác định")
bài viết = [bài viết];
for( var i =0;i< Articles.length;i++ ) {
bài viết = bài viết[i];
bài viết._id = bài viếtCounter++;
bài viết.created_at = Ngày mới();
this.dummyData[this.dummyData.length]= bài viết;
}
gọi lại(null, bài viết);
};
/* Cho phép khởi động bằng dữ liệu giả */
ArticleProvider mới().save([
{title: 'Post one', body: 'Body one', comments:[{author:'Bob', comment:'I love it'}, {author:'Dave', comment:'Thật rác rưởi!'} ]},
{title: 'Bài hai', nội dung: 'Nội dung hai'},
{title: 'Bài ba', nội dung: 'Nội dung ba'}
], hàm(lỗi, bài viết){});
xuất khẩu.ArticleProvider = ArticleProvider;
Bài viết nhà cung cấp-mongodb.js
ArticleProvider = function(host, port) {
this.db= Db mới('node-mongo-blog', Máy chủ mới(máy chủ, cổng, {auto_reconnect: true}, {}));
this.db.open(function(){});
};
ArticleProvider.prototype.save = function(bài viết, gọi lại) {
this.getCollection(function(error, Article_collection) {
if( error ) gọi lại(error)
khác {
if( typeof(articles.length)=="không xác định")
bài viết = [bài viết];
for( var i =0;i< Articles.length;i++ ) {
bài viết = bài viết[i];
bài viết.created_at = Ngày mới();
}
Article_collection.insert(bài viết, hàm() {
gọi lại(null, bài viết);
});
}
});
};
xuất khẩu.ArticleProvider = ArticleProvider;
Đây là tuyến đường của tôi:
var ArticleProvider = new ArticleProvider('localhost', 27017);
app.get('/', function(req, res){
ArticleProvider.findAll(hàm(lỗi,tài liệu){
res.render('index.jade', {title: 'Blog', Articles:docs});
})
res.render('index.jade')
});
Sau đó là file index.jade
// mở rộng bố cục
chặn nội dung
h1= tiêu đề
#bài viết
- mỗi bài viết trong bài viết
div.bài viết
div.created_at=bài viết.created_at
div.title
a(href="/blog/"+article._id.toHexString())!= Article.title
div.body=bài viết.body
Tôi đã đọc rất nhiều về tất cả các phần phụ thuộc nhưng vẫn chưa quen với chúng. Theo như tôi biết thì đây có thể là vấn đề, nếu tôi đúng, vui lòng cho tôi biết cách khắc phục chi tiết.
Mã index.jade của tôi không chính xác
index.jade đề cập đến một mảng, nhưng đối tượng bài viết của tôi không phải là một mảng
mongodb không thiết lập kết nối chính xác với ứng dụng
Mình cần dùng tu sĩ nhưng lại không có
Một số mã của tôi đến từ bài viết này http://howtonode.org/express-mongodb
cảm ơn bạn trước
1. Sửa các tuyến tốc hành
Bạn có nhiều tuyến đường kết xuất
gọi. nên sửa đổi thành.
app.get('/', function(req, res){
ArticleProvider.findAll(hàm(lỗi,tài liệu){
res.render('index.jade', {title: 'Blog', Articles:docs});
})
});
2. Kiểm tra trước khi lặpbài viết
Liệu nó có được xác định trong Jade View hay không
Trước khi lặp lại mảng bài viết, hãy đảm bảo rằng nó được xác định trong Jade View.
Và
chặn nội dung
h1= tiêu đề
#bài viết
- if(typeof(article) !== 'không xác định')
- mỗi bài viết trong bài viết
div.bài viết
div.created_at=bài viết.created_at
div.title
a(href="/blog/"+article._id.toHexString())!= Article.title
div.body=bài viết.body
3. Xử lý các tham số sai trong truy vấn mongo
Bạn cũng xem xét có sẵnerror
biến. Bằng cách này, nếu có lỗi xảy ra trong khi truy vấn mongo, nó có thể được xử lý. giống
app.get('/', function(req, res){
ArticleProvider.findAll(hàm(lỗi,tài liệu){
if(error) {
console.log("lỗi mongo db"+lỗi);
tài liệu = [];
}
res.render('index.jade', {title: 'Blog', Articles:docs});
})
});
Tôi là một lập trình viên xuất sắc, rất giỏi!