node mysql单例_Node.js的单例设计

Node.js的单例设计

在大多数语言中,在整个应用程序中分享一个对象是一个 复杂过程,这些单例实现都很复杂,需要一些额外修改代码才能工作,在Node中,对象类型是缺省的,每个模块都跨应用范围分享,这样你不需要额外类和代码。

当创建一个新模块时,你定义的变量和函数缺省是私有的,你需要使用module.exports来定义你的接口,并且使其公开public。

// module.js

var a = 1; // Private

module.exports = {

b: 2 // Public

};

var m = require('module');

console.log(m.a); // undefined

console.log(m.b); // 2

在设计模块时有很多决策需要决定,我在哪里定义我的函数,在哪里输出我的模块为公开接口?我应当定义我的公开函数直接作为模块的属性吗?

但是保证单一来源是一个遵循的规则,你应该可以在一个地方看到确切的public或private以及到底是怎么回事。同时定义和导出你的公共变量,你得有一个私有和公有的明确分离。而不是让人不断搜查代码以发现代码块函数是如何被导出的。

// Private

var TWO = 2;

function sum(x, y) {

return x + y;

}

// Public

module.exports = {

x: 5,

add2: function(num) {

return sum(TWO, num);

},

addX: function(num) {

return sum(module.exports.x, num);

}

}

其次是避免导出别名,一个Node老手应该知道不会有第二种方式导出你的代码,exports是model.exports的别名,它也可以用作定义你的公共接口,但是必须小心仔细,因为它是module.exports的别名,设置独立的属性也许正常工作,但是如果设置整个exports或module.exports对象,你会中断这两者连接,这样exports就再也不会工作了。

当你定义公共接口时,一定坚持使用module.exports。

exports在一个例外情况下有用,当从私有代码引用公共模块时会有一点作用,取代每次你需要x数值时调用module.exports.x,你能通过exports.x保持你的个性,但是记住为了能让其正常工作,你再也不能给再分配别名了。

// Public

exports = module.exports = {

/* … */

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值