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])
}
module.exports = {
getallusers,
getuser
}
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
每一次的记录,都是向前迈进的一步

浙公网安备 33010602011771号