【发布时间】:2019-11-20 15:19:26
【问题描述】:
我的目标如下:
- 仅在程序开始时一次连接到 Redis 实例。
-
module.exports的连接方法让一个文件可以requires这个对象并发起连接。然后将生成的客户端“传递”到其他模块。 - 如果连接中断,则会引发相应的异常并进行相应处理。
我可以让前两个工作。但是,我不确定如何在我的项目源中处理 Redis elsewhere 的其他事件。
例子:
connect-once.js我正在连接async,以便调用函数可以await完成连接。
const redis = require('redis')
//
async function clientOperations(options) {
let connObject = {}
let redisClient = redis.createClient(options)
return new Promise((resolve, reject) => {
redisClient.on('error', (err) => {
connObject = {
cacheClient: {},
connected: false
}
reject(connObject)
})
//
redisClient.on('connect', () => {
connObject = {
cacheClient: redisClient,
connected: true
}
resolve(connObject)
})
})
}
//
async function connect(options) {
return new Promise(async (resolve, reject) => {
try {
let p = await clientOperations(options)
resolve(p)
} catch(e) {
reject(e)
}
})
}
//
module.exports = { connect }
init.js
const cache = require('connect-once')
let cacheClient = await cache.connect()
//
const bizlogic = require('some-biz-logic')
await bizlogic.addcustomer({cacheClient : cacheClient, payload : express.req.payload})
在上面的 sn-p 中,当 Redis 连接在 bizlogic.addcustomer 中断开时会发生什么?也许,我也在想“程序化编程”。我很想知道如何连接一次,与项目的其余部分共享连接,并在项目中的某处使用该连接时处理任何连接错误。
【问题讨论】:
标签: node.js events redis database-connection