我是nodejs的新手,我正在尝试做一个rss解析器。
我使用猫鼬来存储文章,并使用rss-parser将xml转换为json。
我不知道为什么,但我有错误:"随机无法随机读取 null 的属性"。有时代码有效,有时无效。
/* lib require */
var parser = require('rss-parser');
var mongoose = require('mongoose');
/* Mongodb connection*/
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/rss', function(err) {
if (err) { throw err; }
});
/* Schema for mongoose */
var articleSchema = new mongoose.Schema({
title : String,
pubDate : String,
category: String,
date : { type : Date, default : Date.now }
});
var articleModel = mongoose.model('articles', articleSchema);
/* Array of rss to check */
var rssurl = [];
rssurl.push({url: "URL",
webhook: "LINK";,
category : "CATEGORY"});
rssurl.push({url: "URL",
webhook: "LINK",
category: "CATEGORY"});
/* For each feed, I check if the article exist */
rssurl.forEach(function(item) {
parser.parseURL(item.url, function(err, parsed) {
parsed.feed.entries.forEach(function(entry) {
articleModel.find().count(function(err, count){
if (count <= 0) {
console.log("check");
}
})
})
})
})
编辑:这是错误:
类型错误: 无法读取 null 的属性"feed">
at ~/node_modules/rss-parser/index.js:192:15
Mongoose 允许您在连接成功之前开始建模。
既然你说错误只是偶尔发生,我的怀疑是两件事之一:要么连接稍后失败,要么连接速度较慢,因此在查询数据时它实际上尚未完成所需的工作。
无论哪种情况,您都可以尝试将工作延迟到连接成功后:
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/rss').then(() => {
var articleModel = mongoose.model('articles', articleSchema);
...
}, (err) => {
console.log("failure connecting");
throw err
});
如果代码总是成功,那么我怀疑这是连接到数据库和从中查询结果之间的竞争条件。如果您遇到错误条件,那么您首先就会知道连接时出现问题。