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,平台即服务), 是为开发者提供一个应用运行的平台,有了这人平 ...
随机推荐
- MySQL数据库几种常用的索引类型使用介绍
一.简介 MySQL目前主要有以下几种索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 二.语句 1 2 CREATE TABLE table_name[col_nam ...
- vue+ajax的实现
html <tr> <td>用户名</td> <td id="t01"><input type="text" ...
- Spring中基于xml的AOP
1.Aop 全程是Aspect Oriented Programming 即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的同一维护的一种技术.Aop是oop的延续,是软件开发中的 一个热点 ...
- WeChair项目Beta冲刺(6/10)
团队项目进行情况 1.昨日进展 Beta冲刺第六天 昨日进展: 前后端并行开发,项目按照计划有条不絮进行 2.今日安排 前端:扫码占座功能和预约功能并行开发 后端:扫码占座后端逻辑开发,编码预约 ...
- python的一些基础知识
一.函数介绍 二.模块与包 三.面向对象介绍 四.网络编程基础应用了解 五.基于MySQL对数据库的理解及基础操作 六.粗浅学习的前端知识整理
- TCP协议粘包问题详解
TCP协议粘包问题详解 前言 在本章节中,我们将探讨TCP协议基于流式传输的最大一个问题,即粘包问题.本章主要介绍TCP粘包的原理与其三种解决粘包的方案.并且还会介绍为什么UDP协议不会产生粘包. 基 ...
- JDK8--09:全新的时间API
在JDK8之前,时间有各种问题,最大的问题就是,我们使用的时间格式化类SimpleDateFormat不是线程安全的 为了更准确的说明SimpleDateFormat非线程安全,演示一个并发做时间格式 ...
- max depth exceeded when dereferencing c0-param0的问题
在做项目的时候,用到了dwr,有一次居然报错,错误是max depth exceeded when dereferencing c0-param0 上网查了一下,我居然传参数的时候传的是object类 ...
- Net链接Sql Server语法
1.登录名.密码链接 </system.web> <appSettings> <!--<add key="MSSqlConnectionString&qu ...
- 看完这篇 HashSet,跟面试官扯皮没问题了
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...