Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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 使用Mongoose&;Express.js_Node.js_Oop_Express_Mongoose_Abstract Class - Fatal编程技术网

Node.js 使用Mongoose&;Express.js

Node.js 使用Mongoose&;Express.js,node.js,oop,express,mongoose,abstract-class,Node.js,Oop,Express,Mongoose,Abstract Class,我正在创建一个Express.js应用程序,我想在其中使用MVC模式和Mongoose将文档映射到MongoDB数据库。我已经为模型创建了一个文件夹,我想从(Javascript版本的)抽象类派生所有内容,以更好地组织代码 我不知道组织抽象类和设置模型的每个实例应该具有的默认值的最佳方法是什么。例如,一种方法是对抽象类使用Mongoose模式,然后对模型本身使用Mongoose模型: Feline.js: var mongoose = require('mongoose'); var Feli

我正在创建一个Express.js应用程序,我想在其中使用MVC模式和Mongoose将文档映射到MongoDB数据库。我已经为模型创建了一个文件夹,我想从(Javascript版本的)抽象类派生所有内容,以更好地组织代码

我不知道组织抽象类和设置模型的每个实例应该具有的默认值的最佳方法是什么。例如,一种方法是对抽象类使用Mongoose模式,然后对模型本身使用Mongoose模型:

Feline.js:

var mongoose = require('mongoose');

var Feline = mongoose.Schema({
  size: 'Number'
});

Feline.methods.getSize = function () {
  return this.size;
}

module.exports = Feline;
HouseCat.js:

var mongoose = require('mongoose')
, FelineSchema = require('./Feline.js');

var HouseCatModel = mongoose.model('HouseCat', FelineSchema)
, HouseCat = new HouseCatModel({
  size: 1 //Domesticated cats are small
});

module.exports = HouseCat;
这种设计有一些问题。首先,我认为必须有一种更好的方法来为每个模型设置特定属性,而不必每次客户机想要创建模型类型的新实例时都实例化一个新的模型对象。另一方面,使用此方案时,每个模型文件中都需要Mongoose,并且代码是为使用Mongoose定制的,这意味着如果我们将来想要切换到另一个ODM,将很难


有没有更好的编码方法?是否有任何设计模式可以很容易地在节点中实现,从而可以很容易地更改ODM?

由于mongoose是mongodb特有的,这将是一项很难抽象其行为的任务

最简单的方法是为所有ODM设置一个接口,并在mongoose是“适配器”的地方使用一个接口。然后,您可以使用提供一些依赖注入的模块来替换使用过的ODM

因为这是一项很长的任务,我不能给你一些代码。此外,在javascript中实现这类东西可能是一件痛苦的事情,因为它本身不提供强大的OOP。但是,我可以建议您看看一些可以帮助您做到这一点的方法,例如,它提供了一个强大的OOP范例,包括接口、类、继承和强大的依赖注入