Обратная петля 3 «TypeError: inst.errors.add не является функцией» в коде источника данных-жонглера - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь выполнить пользовательскую проверку между моделями, в основном проверяю, существует ли экземпляр родительской модели (дебаты), прежде чем разрешить создание нового экземпляра дочерней модели (оператора).

Например:

const _  = require('lodash');

model.exports = function(Statement) {
    Statement.validateAsync('debateId', function(err, done) {
        const that = this;
        const Debate = _.get(Statement, 'app.models.Debate');
        Debate.exists(this.debateId, function(error, exists) {
            if (error) err(error);
            if (!exists) err(new Statement.ValidationError(that)); //<--line 71
            done();
        });
    }, { 'message': 'Debate not found.' });
}

Однако при тестировании я получаю следующее, когда преднамеренно передаю неверный обсуждение. Идентификатор :

TypeError: inst.errors.add is not a function
    at onerror (/home/wolferz/workspaces/resolution/node_modules/loopback-datasource-juggler/lib/validations.js:658:37)
    at Debate.exists (/home/wolferz/workspaces/resolution/server/models/statement.js:71:26)
    at /home/wolferz/workspaces/resolution/node_modules/loopback-datasource-juggler/lib/dao.js:1275:7
    at /home/wolferz/workspaces/resolution/node_modules/loopback-connector/lib/sql.js:1529:7
    at /home/wolferz/workspaces/resolution/node_modules/loopback-datasource-juggler/lib/observer.js:250:22
    at doNotify (/home/wolferz/workspaces/resolution/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)
    at MySQL.ObserverMixin._notifyBaseObservers (/home/wolferz/workspaces/resolution/node_modules/loopback-datasource-juggler/lib/observer.js:178:5)
    at MySQL.ObserverMixin.notifyObserversOf (/home/wolferz/workspaces/resolution/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)
    at cbForWork (/home/wolferz/workspaces/resolution/node_modules/loopback-datasource-juggler/lib/observer.js:240:14)
    at /home/wolferz/workspaces/resolution/node_modules/loopback-connector/lib/sql.js:643:9
    at handleResponse (/home/wolferz/workspaces/resolution/node_modules/loopback-connector-mysql/lib/mysql.js:193:17)
    at Query.<anonymous> (/home/wolferz/workspaces/resolution/node_modules/loopback-connector-mysql/lib/mysql.js:204:7)
    at Query.<anonymous> (/home/wolferz/workspaces/resolution/node_modules/mysql/lib/Connection.js:502:10)
    at Query._callback (/home/wolferz/workspaces/resolution/node_modules/mysql/lib/Connection.js:468:16)
    at Query.Sequence.end (/home/wolferz/workspaces/resolution/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)
    at Query._handleFinalResultPacket (/home/wolferz/workspaces/resolution/node_modules/mysql/lib/protocol/sequences/Query.js:139:8)

Это быстро приводит к сбою сервера узла.Что он должен сделать, это вернуть ошибку с сообщением «Дебаты не найдены».пользователю через API.

Я установил точку останова в указанной строке в loopback-datasource-juggler / lib / validation.js и проверил состояние приложения в этой точке,Для справки рассматриваемый код выглядит следующим образом:

if (kind !== false) inst.errors.add(attr, message, code);

kind - ошибка проверки, которую я передал обратному вызову err(), а inst - экземпляр модели Statement, с которой работали (аналогично * 1023).* в моем собственном коде выше).(должно быть очевидно, что отсутствие передачи err () приводит к тому же результату, что и undefined !== false).

Проблема заключается в том, что на данном этапе выполнения inst.errors является логическим (логическое значение false вэтот случай).И, как я уверен, все, кто читает это, знают, что у логических выражений нет метода add(). Ничто из этого не имеет никакого отношения к моему коду. Так что же дает?Это ошибка в Loopback?Я что-то упускаю (действительно, не удивительно, насколько неточной и непоследовательной документация Loopback)?

Node 8.15.0

Loopback 3.24.2

...