我是nodejs的新手,我正在尝试使用rss解析器。
我将mongoose用于商店文章,使用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");
}
})
})
})
})
编辑:这是错误:
TypeError:无法读取null
的属性'feed'at~ / node_modules / rss-parser / index.js:192:15
答案 0 :(得分:0)
Mongoose允许您在连接成功之前开始建模。
既然你说错误只是偶尔发生,我怀疑是两件事之一: 如果连接稍后失败,或连接速度很慢,那么在查询数据时它实际上并没有完成您想要的工作。
在任何一种情况下,您都可以尝试延迟工作,直到连接成功为止:
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/rss').then(() => {
var articleModel = mongoose.model('articles', articleSchema);
...
}, (err) => {
console.log("failure connecting");
throw err
});
如果代码总是成功,那么我怀疑它是连接数据库和查询结果之间的竞争条件。如果您遇到错误情况,那么您将首先知道连接存在问题。