local mongo = require "resty.mongol" local _M = {} --把连接与认证封装在一起,减少不必要认证次数 local function connect(config) local db = mongo:new() if not db then return nil,nil, "db not initialized" end if config.host == nil or config.host == '' or config.port == nil or config.port == '' or config.database == nil or config.database == '' then return nil,nil, "host,port,database can't empty" end local user = config.user if(user == nil or user == '') then user = '' end --支持自定义连接池,这样可以让不同 用户名、密码、数据库 的连接分开,不相互干扰,mongol库本身是没有实现的,所以修改了源码 local pool = user .. ":" .. config.database .. ":" .. config.host .. ":" .. config.port local ok, err = db:connect(config.host, config.port, {pool = pool}) if not ok then return nil,nil,err end --选择数据库 local select_db = db:new_db_handle(config.database) --获取连接池里面的已经auth过连接的数量 local times,err =db:get_reused_times() if((times == 0 or times == nil) and #user > 0) then ok,err = select_db:auth_scram_sha1(config.user,config.password) if not ok then return nil,nil,err end end return db,select_db,nil end return _M
|