UNPKG

yinxing

Version:
114 lines (85 loc) 2.14 kB
const R=require('ramda') const moment=require('moment') const { ObjectID, MongoClient, }=require("mongodb") const { //is_arr, //is_map, before, }=require("../fp") // 数字或 12位字符串 const format_id=({_id,...d}={})=>{ const has_id=!R.isNil(_id) if (has_id) { try{ const oid=ObjectID(_id) return {_id:oid,...d} }catch(e){ console.log("eeee",_id) return d } }else{ return d } } const convert_id=(t)=>before(t,format_id) const format_ids=(d=[])=>d.map(format_id) const CONNECT_OPTIONS={ "useNewUrlParser": true, "useUnifiedTopology": true, 'auto_reconnect': true, 'poolSize': 20, 'keepAlive':1, 'numberOfRetries': 10, 'connectTimeoutMS':5000, 'socketTimeoutMS':5000, 'serverSelectionTimeoutMS':5000, // 'wtimeout':5000, } const MONGO_LOCAL="mongodb://localhost:27017/?retryWrites=true&w=majority&connect=direct" const MONGO_SERVER=process.env.mongo const conn=(url=MONGO_SERVER||MONGO_LOCAL,o=CONNECT_OPTIONS)=>MongoClient.connect(url,o) const set_db_list=async (dbs=[])=>{ let c=await conn() let r={ client:c, dbs:{}, } if (R.isEmpty(dbs)){ return r } let d=dbs.reduce((a,b)=>({...a,[b]:c.db(b)}),{}) return { client:c, dbs:d } } const create_service=(app={env:"test",context:{}},d={},table=["user"])=>{ let env=app.env let {client,dbs}=d let db=dbs[env] app.mongo=client app.context.mongo=client app.context.dbs=d app.service={} app.context.service={} table.forEach((v,k,o)=>{ let t=db.collection(v) convert_id(t) app.service[v]=t app.context.service[v]=t if (!Number(k)) { //别名 app.service[k]=t app.context.service[k]=t } }) return app } const init_mongo=async (app,{DBS,TABLES})=>{ let dbs=await set_db_list(DBS) create_service(app,dbs,TABLES) } module.exports={ conn, set_db_list, create_service, format_id, format_ids, convert_id, ObjectID, }