我使用特定的npm模块抓取Feed,我想要做的是使用相同的代码创建多个动作,尽管我不想重复整个代码。这是我的控制者:
module.exports = {
buzzy: function (req, res) {
var FeedParser = require('feedparser'),
request = require('request');
var req = request('http://rss.nytimes.com/services/xml/rss/nyt/Technology.xml'),
feedparser = new FeedParser();
req.on('error', function (error) {
// handle any request errors
});
req.on('response', function (res) {
var stream = this;
if (res.statusCode != 200) return this.emit('error', new Error('Bad status code'));
stream.pipe(feedparser);
});
feedparser.on('error', function (error) {
// always handle errors
});
feedparser.on('readable', function () {
// This is where the action is!
var stream = this,
meta = this.meta // **NOTE** the "meta" is always available in the context of the feedparser instance
,
item;
while (item = stream.read()) {
var newData = item;
Buzzfeed.create({'title': newData.title, 'url': newData.link, 'source': 'nytimesTech', 'category': 'tech'}, function (err, newTitles) {
});
}
});
}
};
非常类似于' buzzy'控制器动作,我想创建多个动作 - 以下是每个控制器中唯一的行
var req = request('http://rss.nytimes.com/services/xml/rss/nyt/Technology.xml'),
和
Buzzfeed.create({'title': newData.title, 'url': newData.link, 'source': 'nytimesTech', 'category': 'tech'}, function (err, newTitles) {
});
好奇,实施这个的最佳方法是什么,所以我不重复?
答案 0 :(得分:3)
您可以使用服务。如果您在代码中的多个位置使用了函数,则可以使用它们。
请参阅此处的文档:Services
答案 1 :(得分:3)
在/api/services
文件夹中,创建一个文件,将其命名为BuzzyAPI.js
(比如说),然后添加以下代码:
var FeedParser = require('feedparser'),
request = require('request');
module.exports = {
buzzy: function (reqUrl) {
var req = request(reqUrl),
feedparser = new FeedParser();
req.on('error', function (error) {
});
req.on('response', function (res) {
var stream = this;
if (res.statusCode != 200) return this.emit('error', new Error('Bad status code'));
stream.pipe(feedparser);
});
feedparser.on('error', function (error) {
});
feedparser.on('readable', function () {
var stream = this,
meta = this.meta,
item;
while (item = stream.read()) {
var newData = item;
Buzzfeed.create({'title': newData.title, 'url': newData.link, 'source': 'nytimesTech', 'category': 'tech'}, function (err, newTitles) {
});
}
});
}
};
现在,您可以从任何Service
拨打controller
,并使用以下内容提供所需的URL
:
BuzzyAPI.buzzy(url);
希望这有帮助。