Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 避免Sequelize类的多个实例_Node.js_Express_Sequelize.js - Fatal编程技术网

Node.js 避免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

我正在尝试使用Express和Sequelize构建一个基本的数据库模式。我在单独的文件中定义了所有模型。我有一个文件(
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
上的代码只运行一次

您可能想看一看您可能想看一看您可能想看一看您可能想看一看