nodejs之数据库连接
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之数据库连接的更多相关文章
- 配置mysql允许远程链接
默认情况下,mysql帐号不允许从远程登陆,只能在localhost登录.本文提供了二种方法设置mysql可以通过远程主机进行连接. 修改用户表的数据 登入mysql后,更改 mysql 数据库里的 ...
- NodeJs之服务搭建与数据库连接
NodeJs之服务搭建与数据库连接 一,介绍与需求分析 1.1,介绍 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻 ...
- nodejs的mysql模块学习(五)数据库连接配置之SSL
SSL选项 在SSL连接选项中需要一个字符串 或者对象 当是字符串的时候 将使用预定义的SSL配置文件 "Amazon RDS" 只有这一个预定义配置文件 用来连接到亚马逊RDS服 ...
- nodejs的mysql模块学习(三)数据库连接配置选项详解
连接选项 当在创建数据连接的时候 第一种大多数人用的方法 let mysql = require('mysql'); let connection = mysql.createConnection({ ...
- nodejs的mysql模块学习(四)断开数据库连接
断开连接有两种方式 end()函数 在这种情况下 所有先前排队的查询 仍然可以继续继续发送到服务器,但是如果在执行到断开连接的命令之前发生了致命的错误,那么end()将不会被执行 connection ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- nodejs+express+mysql 增删改查
之前,一直使用的是nodejs+thinkjs来完成自己所需的项目需求,而对于nodejs中另外一中应用框架express却了解的少之又少,这两天就简单的了解了一下如何使用express来做一些数据库 ...
- 使用 AngularJS & NodeJS 实现基于token 的认证应用(转)
认证是任何 web 应用中不可或缺的一部分.在这个教程中,我们会讨论基于 token 的认证系统以及它和传统的登录系统的不同.这篇教程的末尾,你会看到一个使用 AngularJS 和 NodeJS 构 ...
- 基于Cloud Foundry平台部署nodejs项目上线
Cloud Foundry(以下简称CF),CF是Vmware公司的PaaS服务平台,Paas(Platform as a Service,平台即服务), 是为开发者提供一个应用运行的平台,有了这人平 ...
随机推荐
- CentOS Linux release 7.7.1908 (Core)--rabbitmq安装
1.连接服务器,输入账号和密码,密码输入的时候是看不见的,只管输就行,然后回车. 2.安装Erlang,RabbitMQ是用这门语言写的,所以要安装他. 3.安装filezilia就是win和linu ...
- 消息队列——ActiveMQ使用及原理浅析
文章目录 引言 正文 一.ActiveMQ是如何产生的? 产生背景 JMS规范 基本概念 JMS体系结构 二.如何使用? 基本功能 消息传递 P2P pub/sub 持久订阅 消息传递的可靠性 事务型 ...
- 记录一次Flink作业异常的排查过程
最近2周开始接手apache flink全链路监控数据的作业,包括指标统计,业务规则匹配等逻辑,计算结果实时写入elasticsearch. 昨天遇到生产环境有作业无法正常重启的问题,我负责对这个问题 ...
- 安卓开发-Activity-多个Activity的开发方法。
原文链接:https://blog.csdn.net/weixin_38420342/article/details/84344496 一.切换Activity的5种方式 Intent intent ...
- 一文读懂:GBDT梯度提升
先缕一缕几个关系: GBDT是gradient-boost decision tree GBDT的核心就是gradient boost,我们搞清楚什么是gradient boost就可以了 GBDT是 ...
- Java深拷贝和浅拷贝的区别
浅拷贝 被复制的对象的所有的变量都与原对象有相同的值,而所有的引用对象仍然指向原来的对象.换言之,浅拷贝 不复制引用对象. 1 class Experience { 2 private String ...
- Spring Boot 整合 Apollo
简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景 ...
- 并发编程,python的进程,与线程
并发编程 操作系统发展史 基于单核研究 多道技术 1.空间上的复用 多个程序公用一套计算机硬件 2.时间上的复用 切换+保存状态 例子:洗衣 烧水 做饭 切换 1.程序遇到IO操作系统会立刻剥夺走CP ...
- 新来的"大神"用策略模式把if else给"优化"了,技术总监说:能不能想好了再改?
本文来自作者投稿,原作者:上帝爱吃苹果 目前在魔都,贝壳找房是我的雇主,平时关注一些 java 领域相关的技术,希望你们能在这篇文章中找到些有用的东西.个人水平有限,如果文章有错误还请指出,在留言区一 ...
- 浅谈MySQL数据库
目录 什么是数据库 定义 发展现状 数据库基本概念 数据库分类 关系数据库 非关系型数据库(NoSQL) 数据库启动与连接 启动服务端 连接数据库 用户信息查看 数据库的基本操作 表的基本操作 记录的 ...