Node.js教程 一文学会ORM知识点
小作 2018-02-01 来源 :网络 阅读 629 评论 0

摘要:此篇Node.js教程中将讲解ORM知识点。ORM2是一款基于Node.js实现的ORM框架,名字相当的霸气,算是同类框架中非常出色的一款。

此篇Node.js教程中将讲解ORM知识点。ORM2是一款基于Node.js实现的ORM框架,名字相当的霸气,算是同类框架中非常出色的一款。

刚接触Node.js + MySQL,在引入项目之初,受Asp.Net经验的影响,产生了许多不小的麻烦。下面是我定义的一个BaseProvider,作为所有DB Provider的父类,提供了一些公共的方法和属性。

getProviderModel 相当于获得一个Model,具有CRUD的功能,简化我们写SQL语句的繁琐过程。

在阅读ORM2的源码后,我发现了一个严重的问题,该方法用于连接,返回一个名为db的ORM对象,这个对象的职责是维护Nodejs到具体DB的连接信息、各种配置、连接池、缓存、Model等,而非ADO.Net中单纯的Connection,下面是ORM. Connect的部分代码。

 View Code

而我常用define方法,就是在上面的那个db中的models数组中push一个对象而已。

ORM2在connect时就把mysql的连接池自己维护起来了,存在一个变量中,所以Provider的每一次操作都会ORM.connect,返回的db作为一个局部变量用完就丢弃,维护的连接池也没有保存,造成连接数太多,从而产生many connection error,下图是mysql统计的数据,丢失的连接数达1000多。

Node.js教程 一文学会ORM知识点

每次调用都是新的连接池。

Node.js教程 一文学会ORM知识点

我在系统启动时创建ORM的DB,存到BaseProvider的原型中。

ORM.connect(pomelo.app.get("mysql"), function (error, db) {
    BaseProvider.prototype.db = db;
    console.log("init connect~");
});

Define的时候直接访问缓存的db变量。

var define = function (name, properties, opts, callback) {
    var model = BaseProvider.prototype.db.define(name, properties, opts);
    callback(null, model);
};

我并发执行6个操作,连接池会创建6个连接满足执行需求。


因为先前已经创建了6个连接,第二次执行的时候,则直接返回。


测试了一下午,连接池终于正常了。


ORM的知识点大家都了解了么?总之,同学们,你想要的职坐标IT频道都能找到!


本文由 @小作 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程