Nodejs Превышен максимальный размер стека вызовов - PullRequest
1 голос
/ 20 марта 2020

Я получаю вышеуказанную ошибку в этой строке set active(val) следующего кода:

middleware. js

class middleware {

    constructor(){
        this.active = false;
    };

    set active(val) {
        this.active = val;
    };

    get active(){
        return this.active;
    };

}

module.exports = middleware

маршрутов. js

const middleware = require('../middleware')

router.get("/start", passport.authenticate('jwt', { failureRedirect: '/login' }), (req, res) => {

    var mw = new middleware()
    mw.active = true;

}

Что я делаю не так?

1 Ответ

3 голосов
/ 20 марта 2020

Ваше свойство active является свойством доступа , и вы присваиваете ему свой собственный установщик. Это снова вызывает установщик, который снова вызывает установщик и т. Д. c.

Если вы хотите, чтобы active было свойством доступа, вам нужно сохранить значение в другом месте. В наши дни вы можете использовать личное поле в современных версиях Node.js:

class middleware {
    #active = false;

    constructor(){
    }

    set active(val) {
        this.#active = val;
    }

    get active(){
        return this.#active;
    }
}

или просто другое свойство:

class middleware {
    constructor(){
        this._active = false;
    }

    set active(val) {
        this._active = val;
    }

    get active(){
        return this._active;
    }
}

Или сделать active свойством данных:

class middleware {
    constructor(){
        this.active = false;
    }
}

Примечание: определения методов в class телах не имеют ; после них. (A ; допускается там грамматикой языка, но ее там не должно быть.)

...