Node.js从入门到精通 Node.js 多模块共享数据库如何连接
沉沙 2018-06-06 来源 : 阅读 1059 评论 0

摘要:本文介绍了在 Node.js 项目中不同模块之间共享数据库连接的方法。希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

本文介绍了在 Node.js 项目中不同模块之间共享数据库连接的方法。

这个标题本身就是一个命题,因为使用默认方式的情况下,一个 Node.js 应用里的各个模块都是共享的同一个数据库连接。但是如果姿势不对,可能会很丑陋,甚至可能会出错。


建立了两个数据模型(Model),一个是用户(User),一个是航班(Flight),分别封装到了 user.js, flight.js 这两个模块(Module)里面。Model 专门负责和数据库交互,用户和航班这两个模块都需要连接数据库,一开始代码是这样的:

// ----- user.js -----// require mongoose.js 引用mongoose.jsvar M = require('mongoose');// connect to database 连接数据库
M.connect('mongodb://localhost/test');// ... some other code ...
// ----- flight.js -----// require mongoose.js 引用mongoose.jsvar M = require('mongoose');// connect to database 连接数据库
M.connect('mongodb://localhost/test');// ... some other code ...
// ----- models.js -----var user = require('./user'),
    flight = require('./flight');
// ----- index.js -----var Models = require('./models');

且不说这种写法一点都不 DRY,这种方式本身就是错误的。当运行 index.js 时,会出现如下错误。

> node index.js

> Connection error: { [Error: Trying to open unclosed connection.] state: 2 }

错误是:尝试打开未关闭的连接。

所以我们应该在一个地方连接一次数据库,然后其他需要连接数据库的模块通过这个模块来和数据库交互。就好像插线板,义无反顾地吼叫道:“墙上就一个插座,你们不要抢了!放着我来!你们。。。就可以了!”

具体方案

我们把连接数据库的动作放到一个模块里,并且把连接暴露给整个应用中的其他模块,然后其他需要连接数据库的模块引用这个连接即可。

// ----- database.js -----var M = require('mongoose');

M.connect('mongodb://localhost/test');// reference to the database connection 为这个连接创建一个引用var db = M.connection;// expose to modules that require database.js 把这个引用暴露给引用 database 模块的其他模块module.exports = db;

// ----- user.js ----- flight.js 类似 -----// ... some other code ...// 我们会在 models.js 中,把数据库连接的引用作为参数传进来module.exports = function( db ){

    if( db ){

        // ... do things with the connection ... 如果连接了数据库,就可以执行数据库相关的操作了

    }

}

// ----- models.js -----// require database module, retrieve the reference to database connection 引用 databse 模块,获取数据库连接的引用var db = require('./database');// 把数据库连接的引用传入需要连接数据库的模块,任务完成!var user = require('./user')( db ),

    flight = require('./flight')( db );

这就是让一个 Node.js 应用的多个模块共享数据库连接的一种方法。


本文由职坐标整理发布,更多相关知识,请关注职坐标WEB前端Node.js频道!


本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 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小时内训课程