nodejs 对 MySQL、mongodb、redis 数据库的连接方式。

MySQL:

var mysql = require('mysql')
var { MYSQL } = require('../config/default.js') // 创建连接池
var pool = mysql.createPool({
host: MYSQL.HOST,
port: MYSQL.PORT,
user: MYSQL.USERNAME,
password: MYSQL.PASSWORD,
database: MYSQL.DATABASE
}) // 查询函数
const query = (sql, params) => {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
resolve(err)
} else {
connection.query(sql, params, (error, results, fields) => {
if (error) {
reject(error)
} else {
resolve(results)
} connection.release(err => {
if (err) {
console.log('DB-关闭数据库连接异常')
}
})
})
}
})
})
} module.exports = query

用法示例:

const query = require('../mysql')

// 查询所有用户
const getallusers = () => {
const _sql = 'SELECT * FROM tb_user' return query(_sql)
} // 查询单个用户信息
const getuser = (username) => {
const _sql = 'SELECT * FROM tb_user WHERE username = ?' return query(_sql, [username])
}

mongodb:

const MongoClient = require('mongodb').MongoClient
const { MONGO } = require('../config/default') // 无账号登录
let url = 'mongodb://' + MONGO.HOST + ':' + MONGO.PORT + '/' // 有账号登录,对于有特殊字符的密码需要 encodeURIComponent
if (MONGO.USERNAME && MONGO.PASSWORD) {
url = 'mongodb://' + MONGO.USERNAME + ':' +
encodeURIComponent(MONGO.PASSWORD) + '@' + MONGO.HOST + ':' + MONGO.PORT + '/'
} class Mongo {
static getInstance() {
if (!Mongo.instance) {
Mongo.instance = new Mongo
}
return Mongo.instance
} constructor() {
this.client = ''
this.connect()
} connect() {
return new Promise((resolve, reject) => {
if (!this.client) {
new MongoClient(url, { useNewUrlParser: true, useUnifiedTopology: true }).connect((err, client) => {
if (err) {
reject(err)
} else {
this.client = client.db(MONGO.DATABASE)
resolve(this.client)
}
})
} else {
resolve(this.client)
}
})
}
} // 暴露实例,全局通用
module.exports = Mongo.getInstance()

用法示例:

const mdb = require('../../mdb')

module.exports = {
// 更新文章
updateArticleInfo (id, data) {
return new Promise((resolve, reject) => {
mdb.connect().then(async db => {
let articleColl = db.collection('article') articleColl.updateOne({ _id: ObjectId(id) }, {
$set: data
}, async (err, res) => {
if (!err) {
let [_data] = await articleColl.find({ _id: ObjectId(id) }).toArray()
resolve(_data)
return
}
reject(err)
})
})
})
}
}

redis:

// https://www.npmjs.com/package/ioredis
const Redis = require('ioredis')
const { REDIS } = require('../config/default') // redis 直接暴露 ioredis 的实例即可
module.exports = new Redis({
port: REDIS.PORT, // Redis port
host: REDIS.HOST, // Redis host
prefix: REDIS.PREFIX, //存诸前缀
// ttl: REDIS.TTL, //过期时间
// family: REDIS.FAMILY,
password: REDIS.PASSWORD
// db: 0
})

用法示例:

const Redis = require('../redis')

const redisFun = {
set(key, value) {
return new Promise((resolve, reject) => {
Redis.set(key, value).then(res => {
resolve()
}).catch(err => {
reject()
})
})
},
get(key) {
return new Promise((resolve, reject) => {
Redis.get(key).then(res => {
resolve(res)
}).catch(err => {
reject(err)
})
})
}
} module.exports = redisFun

nodejs之数据库连接的更多相关文章

  1. 配置mysql允许远程链接

    默认情况下,mysql帐号不允许从远程登陆,只能在localhost登录.本文提供了二种方法设置mysql可以通过远程主机进行连接. 修改用户表的数据 登入mysql后,更改 mysql 数据库里的 ...

  2. NodeJs之服务搭建与数据库连接

    NodeJs之服务搭建与数据库连接 一,介绍与需求分析 1.1,介绍 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻 ...

  3. nodejs的mysql模块学习(五)数据库连接配置之SSL

    SSL选项 在SSL连接选项中需要一个字符串 或者对象 当是字符串的时候 将使用预定义的SSL配置文件 "Amazon RDS" 只有这一个预定义配置文件 用来连接到亚马逊RDS服 ...

  4. nodejs的mysql模块学习(三)数据库连接配置选项详解

    连接选项 当在创建数据连接的时候 第一种大多数人用的方法 let mysql = require('mysql'); let connection = mysql.createConnection({ ...

  5. nodejs的mysql模块学习(四)断开数据库连接

    断开连接有两种方式 end()函数 在这种情况下 所有先前排队的查询 仍然可以继续继续发送到服务器,但是如果在执行到断开连接的命令之前发生了致命的错误,那么end()将不会被执行 connection ...

  6. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  7. nodejs+express+mysql 增删改查

    之前,一直使用的是nodejs+thinkjs来完成自己所需的项目需求,而对于nodejs中另外一中应用框架express却了解的少之又少,这两天就简单的了解了一下如何使用express来做一些数据库 ...

  8. 使用 AngularJS & NodeJS 实现基于token 的认证应用(转)

    认证是任何 web 应用中不可或缺的一部分.在这个教程中,我们会讨论基于 token 的认证系统以及它和传统的登录系统的不同.这篇教程的末尾,你会看到一个使用 AngularJS 和 NodeJS 构 ...

  9. 基于Cloud Foundry平台部署nodejs项目上线

    Cloud Foundry(以下简称CF),CF是Vmware公司的PaaS服务平台,Paas(Platform as a Service,平台即服务), 是为开发者提供一个应用运行的平台,有了这人平 ...

随机推荐

  1. (五)application/x-www-form-urlencoded(表单请求)

    原文链接:https://blog.csdn.net/justry_deng/article/details/81042379

  2. java并发编程 --并发问题的根源及主要解决方法

    目录 并发问题的根源在哪 缓存导致的可见性 线程切换带来的原子性 编译器优化带来的有序性 主要解决办法 避免共享 Immutability(不变性) 管程及其他工具 并发问题的根源在哪 首先,我们要知 ...

  3. cb43a_c++_STL_算法_删除_(1)remove_remove_if

    cb43a_c++_STL_算法_删除_(1)remove_remove_ifremove()remove_if() 注意:1.并不是真正的删除,而是把后面的元素向前移动,覆盖被删除元素,元素个数并没 ...

  4. 前台页面id为空--驼峰命名映射

    错误: 前台页面id为空,或其他数据映射问题(方案2) 原因: java的bean类属性和数据库字段命名不一致,查询的时候就不能把数据封装进bean类里,  在数据库字段命名规范中,通常使用下划线“_ ...

  5. python3.6 + django2.0.6 + xadmin0.6

    django2.0集成xadmin0.6报错集锦 http://www.lybbn.cn/data/bbsdatas.php?lybbs=50 1.django2.0把from django.core ...

  6. Kubernetes学习笔记(九):StatefulSet--部署有状态的多副本应用

    StatefulSet如何提供稳定的网络标识和状态 ReplicaSet中的Pod都是无状态,可随意替代的.又因为ReplicaSet中的Pod是根据模板生成的多副本,无法对每个副本都指定单独的PVC ...

  7. 5种经典的Linux桌面系统

    最近一直在准备Linux相关的PPT,对于一个老码农来说Linux系统自然是比较熟悉了,随口可以说出好几种Linux的版本,然而对于计算机初学者可能就知道windows操作系统.也许你告诉他你可以安装 ...

  8. C# CLosedXML四句代码搞定DataTable数据导出到Excel

    最近用到DataTable导出到Excel,网上看了一下,都不怎么好使,逛了下GitHub一下完美解决了 用到的.net库CLosedXML,这个库用于读取,处理和写入Excel 2007+(.xls ...

  9. 【转载】张一鸣:为什么 BAT 挖不走我们的人才?

    很多企业失败的时候,总说是政策的变化.市场的变化.消费者需求的变化.技术发展的变化等等,导致了失败,其实这都是瞎说,归根结底还是人的原因,都是因为你招的人不行.可见,人才对于一个企业的重要性. 互联网 ...

  10. 学习Java的Day04

    知识点 接口: 1.接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 2. 接口中只允许出现抽象方法,不能出现非抽象方法 3. 接口的源文件也是java文件,编译后的文件也是. ...