Node.js 如何跨多个控制器操作重用(大部分)这些代码?

Node.js 如何跨多个控制器操作重用(大部分)这些代码?,node.js,model-view-controller,sails.js,Node.js,Model View Controller,Sails.js,我使用一个特定的npm模块获取提要,我想做的是用相同的代码创建多个操作,尽管我不想重复整个代码。这是我的控制器: module.exports = { buzzy: function (req, res) { var FeedParser = require('feedparser'), request = require('request'); var req = request('http://rss.nytimes.com

我使用一个特定的npm模块获取提要,我想做的是用相同的代码创建多个操作,尽管我不想重复整个代码。这是我的控制器:

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'),


好奇的是,实现这一点的最佳方法是什么?我不再重复了。

您可以使用服务。如果在代码中的多个位置使用函数,则可以使用它们


请参阅此处的文档:

/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) {

        });
      }
    });    
  }
};
现在,您可以从任何
控制器
调用
服务
,并使用以下方法提供所需的
URL

BuzzyAPI.buzzy(url);

希望有帮助。

谢谢:-这解决了它,所以本质上是通过创建一个服务控制器作为一个对象,其中一个对象具有参数的功能,然后在控制器动作中传递适当的参数:DIF解决了这个问题,然后请考虑接受这个答案来解决这个问题:
BuzzyAPI.buzzy(url);