2012-11-08 68 views
0

我有一个特定的代码块(forEach循环),我在代码库的每个地方都会用到,只要我有一个“item”。node.js模块的特定代码块

如何将其重构为模块或全局函数,我可以随时调用该函数。

这里的背景:

Item.findById(itemid).populate('wants').exec(function(err, item){ 
     item.wants.forEach(function(person){ 
      person.avatar = gravatar.url(person.email, {size: 80, default: 'mm' }); 
     }); 

     //do some more stuff with item 
}); 

我想,我有一个“项目”对象重新使用在其他地方这个forEach循环。我在想我传入物品对象并再次返回。

item.wants.forEach(function(person){ 
     person.avatar = gravatar.url(person.email, {size: 80, default: 'mm' }); 
    }); 

喜欢的东西:

var myLib = require('./lib/myLib'); 
... 
item = myLib.doStuff(item); 

回答

0

./lib/myLib.js文件应该是这样的:

module.exports.doStuff = function(item) { 
    item.wants.forEach(function(person){ 
     person.avatar = gravatar.url(person.email, {size: 80, default: 'mm' }); 
    }); 
    return item; 
} 

然后,您可以要求和使用像您介绍了已经:

var myLib = require('./lib/myLib'); 
item = myLib.doStuff(item); 
+0

谢谢,我只是试过这个,但是因为它是一个猫鼬的对象,有没有被允许覆盖它的特殊之处。重新赋值会导致其他属性消失'item = myLib.doStuff(item);'我通过这样做了:'myLib.doStuff(item)' - 我猜一切都是引用而不是副本。不完全确定这是为什么起作用,但确实如此。 – chovy