Node.js 避免Sequelize类的多个实例
我正在尝试使用Express和Sequelize构建一个基本的数据库模式。我在单独的文件中定义了所有模型。我有一个文件(Node.js 避免Sequelize类的多个实例,node.js,express,sequelize.js,Node.js,Express,Sequelize.js,我正在尝试使用Express和Sequelize构建一个基本的数据库模式。我在单独的文件中定义了所有模型。我有一个文件(models/index.js),在其中创建Sequelize类的实例,导入模型,并在模型之间建立关系。我还有多个控制器,每个控制器都需要访问从models/index.js导出的模型 以下是导入模型的文件: // models/index.js var Sequelize = require('sequelize'); var sequelize = new Sequeli
models/index.js
),在其中创建Sequelize类的实例,导入模型,并在模型之间建立关系。我还有多个控制器,每个控制器都需要访问从models/index.js
导出的模型
以下是导入模型的文件:
// models/index.js
var Sequelize = require('sequelize');
var sequelize = new Sequelize('myApp', 'username', 'password');
var User = sequelize.import('./users');
var Contact = sequelize.import('./contacts');
var Conversation = sequelize.import('./conversations');
var Medium = sequelize.import('./mediums');
User.hasMany(Contact);
Contact.belongsTo(User);
Contact.hasMany(Conversation);
Conversation.belongsTo(Contact);
Medium.hasMany(Conversation);
Conversation.belongsTo(Medium);
module.exports.Sequelize = Sequelize;
module.exports.sequelize = sequelize;
module.exports.User = User;
module.exports.Contact = Contact;
module.exports.Conversation = Conversation;
module.exports.Medium = Medium;
这是一个需要访问模型的控制器
// controllers/users.js
var models = require('../models');
module.exports.addUser = function () {
};
module.exports.getUser = function () {
};
// controllers/contacts.js
var models = require('../models');
module.exports.addContact = function () {
};
module.exports.getContact = function () {
};
module.exports.getAllContacts = function () {
};
这是另一个需要访问模型的控制器
// controllers/users.js
var models = require('../models');
module.exports.addUser = function () {
};
module.exports.getUser = function () {
};
// controllers/contacts.js
var models = require('../models');
module.exports.addContact = function () {
};
module.exports.getContact = function () {
};
module.exports.getAllContacts = function () {
};
我关心的是两个控制器都需要models/index.js
文件。每次需要models/index.js
文件时,都会创建Sequelize类的新实例,从而建立到数据库的新连接。有人对避免Sequelize类的多个实例有什么建议吗
提前谢谢 模块(文件)缓存在节点中:
模块在第一次加载后被缓存。这意味着(除其他外)每个对require('foo')的调用都将返回完全相同的对象,前提是它将解析为相同的文件
多次调用require('foo')可能不会导致多次执行模块代码。这是一个重要特征。使用它,可以返回“部分完成”的对象,从而允许加载可传递的依赖项,即使它们会导致循环
如果您想让一个模块多次执行代码,那么请导出一个函数并调用该函数
这意味着,models/index.js
上的代码只会在节点中缓存一次模块(文件):
模块在第一次加载后被缓存。这意味着(除其他外)每个对require('foo')的调用都将返回完全相同的对象,前提是它将解析为相同的文件
多次调用require('foo')可能不会导致多次执行模块代码。这是一个重要特征。使用它,可以返回“部分完成”的对象,从而允许加载可传递的依赖项,即使它们会导致循环
如果您想让一个模块多次执行代码,那么请导出一个函数并调用该函数
这意味着,models/index.js
上的代码只会在节点中缓存一次模块(文件):
模块在第一次加载后被缓存。这意味着(除其他外)每个对require('foo')的调用都将返回完全相同的对象,前提是它将解析为相同的文件
多次调用require('foo')可能不会导致多次执行模块代码。这是一个重要特征。使用它,可以返回“部分完成”的对象,从而允许加载可传递的依赖项,即使它们会导致循环
如果您想让一个模块多次执行代码,那么请导出一个函数并调用该函数
这意味着,models/index.js
上的代码只会在节点中缓存一次模块(文件):
模块在第一次加载后被缓存。这意味着(除其他外)每个对require('foo')的调用都将返回完全相同的对象,前提是它将解析为相同的文件
多次调用require('foo')可能不会导致多次执行模块代码。这是一个重要特征。使用它,可以返回“部分完成”的对象,从而允许加载可传递的依赖项,即使它们会导致循环
如果您想让一个模块多次执行代码,那么请导出一个函数并调用该函数
这意味着,
models/index.js
上的代码只运行一次您可能想看一看您可能想看一看您可能想看一看您可能想看一看