Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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 NodeJS:如何实现存储库模式_Node.js_Repository Pattern - Fatal编程技术网

Node.js NodeJS:如何实现存储库模式

Node.js NodeJS:如何实现存储库模式,node.js,repository-pattern,Node.js,Repository Pattern,我想在我的NodeJS应用程序中实现存储库模式,但我在循环需求方面遇到了麻烦(我猜…) 我如何尝试实施它: PersonRepository类及其方法:getAll、getById、create、update、delete 方法为:init、createAccount、showRelations、addRelations、 首先:我的存储库模式设计正确吗? 我的班级: personRepository.js const PersonModel = require('./model'); co

我想在我的NodeJS应用程序中实现存储库模式,但我在循环需求方面遇到了麻烦(我猜…)

我如何尝试实施它:

  • PersonRepository类及其方法:getAll、getById、create、update、delete
  • 方法为:init、createAccount、showRelations、addRelations、
首先:我的存储库模式设计正确吗?

我的班级:

personRepository.js

const PersonModel = require('./model');
const Person = require('./person');

class PersonRepository {

    constructor() {
        this._persons = new Set();
    }

    getAll( cb ) { // To Do: convert to promise
        let results = new Set();

        PersonModel.find({}, 'firstName lastName', (err, people) => {
            if (err) { 
                console.error(err);
            }
            people.forEach((person, index) => {
                let foundPerson = new Person(person._id.toString(), person.firstName, person.lastName, person.email, person.birthday);
                results.add(foundPerson);
            });
            this._persons = results;
            if (cb) cb(this._persons);
        });
    }

    getById(id) {

        return PersonModel.findOne({ _id: id });

    }

    getByEmail(email) {
        throw new Error("Method not implemented");
    }

    create( person ) {
        throw new Error("Method not implemented");
    }

    update ( person ) {
        throw new Error("Method not implemented");
    }

    delete ( person ) {
        throw new Error("Method not implemented");
    }
}

module.exports = new PersonRepository();
const PersonModel = require('./model');
const personRepository = require('./personRepository');

class Person {

    constructor(personId, first, last, email, birthday) {
        this._id = personId ? personId : undefined;
        this._firstName = first ? first : undefined;
        this._lastName = last ? last : undefined;
        this._email = email ? email : undefined;
        this._birthday = birthday ? new Date(birthday) : undefined;
        this._relations = new Map();
    }
    init() { // Get all data from database
        personRepository.getById(this._id)
            .then(console.log)
            .catch(console.error);
    }

}

module.exports = Person;
console.log("--- GET ALL : results--- ");
personRepository.getAll( (persons) => {
    for (let person of persons) {
        person.loadAllData()
            .then(() => {
                console.log(person);
            })
            .catch((e) => {
                console.log(e);
            });
    }

});
console.log("--- INIT : results--- ");
var personInit = new Person("59c18a9029ef510012312995");
console.log("before init");
console.log(personInit);
personInit.init();
console.log("after init");
console.log(personInit);
person.js

const PersonModel = require('./model');
const Person = require('./person');

class PersonRepository {

    constructor() {
        this._persons = new Set();
    }

    getAll( cb ) { // To Do: convert to promise
        let results = new Set();

        PersonModel.find({}, 'firstName lastName', (err, people) => {
            if (err) { 
                console.error(err);
            }
            people.forEach((person, index) => {
                let foundPerson = new Person(person._id.toString(), person.firstName, person.lastName, person.email, person.birthday);
                results.add(foundPerson);
            });
            this._persons = results;
            if (cb) cb(this._persons);
        });
    }

    getById(id) {

        return PersonModel.findOne({ _id: id });

    }

    getByEmail(email) {
        throw new Error("Method not implemented");
    }

    create( person ) {
        throw new Error("Method not implemented");
    }

    update ( person ) {
        throw new Error("Method not implemented");
    }

    delete ( person ) {
        throw new Error("Method not implemented");
    }
}

module.exports = new PersonRepository();
const PersonModel = require('./model');
const personRepository = require('./personRepository');

class Person {

    constructor(personId, first, last, email, birthday) {
        this._id = personId ? personId : undefined;
        this._firstName = first ? first : undefined;
        this._lastName = last ? last : undefined;
        this._email = email ? email : undefined;
        this._birthday = birthday ? new Date(birthday) : undefined;
        this._relations = new Map();
    }
    init() { // Get all data from database
        personRepository.getById(this._id)
            .then(console.log)
            .catch(console.error);
    }

}

module.exports = Person;
console.log("--- GET ALL : results--- ");
personRepository.getAll( (persons) => {
    for (let person of persons) {
        person.loadAllData()
            .then(() => {
                console.log(person);
            })
            .catch((e) => {
                console.log(e);
            });
    }

});
console.log("--- INIT : results--- ");
var personInit = new Person("59c18a9029ef510012312995");
console.log("before init");
console.log(personInit);
personInit.init();
console.log("after init");
console.log(personInit);
tests.js

const PersonModel = require('./model');
const Person = require('./person');

class PersonRepository {

    constructor() {
        this._persons = new Set();
    }

    getAll( cb ) { // To Do: convert to promise
        let results = new Set();

        PersonModel.find({}, 'firstName lastName', (err, people) => {
            if (err) { 
                console.error(err);
            }
            people.forEach((person, index) => {
                let foundPerson = new Person(person._id.toString(), person.firstName, person.lastName, person.email, person.birthday);
                results.add(foundPerson);
            });
            this._persons = results;
            if (cb) cb(this._persons);
        });
    }

    getById(id) {

        return PersonModel.findOne({ _id: id });

    }

    getByEmail(email) {
        throw new Error("Method not implemented");
    }

    create( person ) {
        throw new Error("Method not implemented");
    }

    update ( person ) {
        throw new Error("Method not implemented");
    }

    delete ( person ) {
        throw new Error("Method not implemented");
    }
}

module.exports = new PersonRepository();
const PersonModel = require('./model');
const personRepository = require('./personRepository');

class Person {

    constructor(personId, first, last, email, birthday) {
        this._id = personId ? personId : undefined;
        this._firstName = first ? first : undefined;
        this._lastName = last ? last : undefined;
        this._email = email ? email : undefined;
        this._birthday = birthday ? new Date(birthday) : undefined;
        this._relations = new Map();
    }
    init() { // Get all data from database
        personRepository.getById(this._id)
            .then(console.log)
            .catch(console.error);
    }

}

module.exports = Person;
console.log("--- GET ALL : results--- ");
personRepository.getAll( (persons) => {
    for (let person of persons) {
        person.loadAllData()
            .then(() => {
                console.log(person);
            })
            .catch((e) => {
                console.log(e);
            });
    }

});
console.log("--- INIT : results--- ");
var personInit = new Person("59c18a9029ef510012312995");
console.log("before init");
console.log(personInit);
personInit.init();
console.log("after init");
console.log(personInit);
问题: 当运行“getall”测试(不包括INIT测试)时,它可以工作。 当我添加INIT测试时,会出现以下错误:

personRepository.getById(this._id)
                         ^

TypeError: personRepository.getById is not a function
    at Person.init
我怎样才能防止这种情况发生? -更改我需要模块的方式? -改变我的设计?(例如,不需要personRepository中的Person类,只需在“getAll”中创建一组ID,而不是一组Person) -其他想法


谢谢你帮助我!我花了几个小时试图解决这个问题…

我自己解决了。问题是两个模块之间存在循环依赖关系。通过将
require
s移动到
模块后,可以解决此问题。导出


参考资料:

链接已断开,请共享解决方案好吗?