gpt4 book ai didi

node.js - 如何使用 CoffeeScript 设置 Sequelize 单例?

转载 作者:行者123 更新时间:2023-12-03 22:29:26 25 4
gpt4 key购买 nike

我正在创建一个 npm 包,它将充当连接到我的数据库的单例。它将最终处理其他实用程序类型函数并内置复杂查询。我想使用 Sequelize 连接到我的数据库。

在我的包裹中,我有:

class Singleton
@getInstance: ->
@_instance ?= new @(arguments...)

class MyDb extends Singleton
constructor: (config) ->
sequelize = new Sequelize config.database, config.username, config.password,
dialect: 'postgresql'
host: config.host
port: config.port
logging: false
define:
charset: 'utf8'
collate: 'utf8_general_ci'

db = {}

modelPath = "./models"

files = fs.readdirSync modelPath

_.each files, (file) ->
if '.coffee' is path.extname file
model = sequelize.import path.join modelPath, file
db[model.name] = model

Object.keys(db).forEach (modelName) ->
if 'associate' of db[modelName]
db[modelName].associate db

myDb = _.assign db,
sequelize: sequelize
Sequelize: Sequelize

console.log myDb
return myDb

module.exports = MyDb

我显然做错了很多。最终,我想像这样使用它:
mydb = require 'mydb'

mydb.connect 'myconnection params', (err) ->
console.log err if err

# some code and stuff here

mydb.User.find
where:
email: 'bob
.complete (err, dbUser) ->
#whatever

# SOME OTHER FILE THAT GETS CALLED AFTER THE MAIN ONE
mydb = require 'mydb'

mydb.Home.find
where:
zip: '12345'

我怎样才能设置我的包来完成这个?

最佳答案

Node.js 中不需要单例模式来完成你想要做的事情,但如果你愿意,你仍然可以使用它。 Node.js 缓存所有 require() 调用,因此每次调用 require('./mydb') 时,它都会返回完全相同的对象或函数。

要使您的代码正常工作,您只需要:

module.exports = new MyDb({ .. 连接信息 .. })

从那时起,在您的各种文件中,您可以调用 require('./mydb'),它将返回 MyDB 类的相同实例(每次调用 require 时它都不会执行 new MyDb(),这是一个常见的错误!)。

因此,当使用 Sequelize 简单地创建一个调用 new Sequelize() 的文件并导出该实例(连同模型,就像您所做的那样)时,这是一种常见的做法。

关于node.js - 如何使用 CoffeeScript 设置 Sequelize 单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28003772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com