Обратный вызов удаленного метода обратной петли не работает

Хорошо, граждане Интернета, мне нужна помощь ... Мой супер-простой удаленный метод не запускает обратный вызов. Вместо этого я получаю это сообщение об ошибке:

/maestro/common/models/datalog.js:11
                cb(null, err || 'success');
                ^
TypeError: undefined is not a function
    at /maestro/common/models/datalog.js:11:11

Модель:

module.exports = function(Datalog) {

    Datalog.logdata = function(description, errordetails, errormsg, severity, cb) {
        Datalog.create(
            {
                description: description,
                errordetails: errordetails,
                errormsg: errormsg,
                severity: severity
            }, function(err, res) {
                cb(null, err || 'success');
            }
        );
    }

    Datalog.remoteMethod(
        'logdata', 
        {
            accepts: [
                {arg: 'description',  type: 'string'},
                {arg: 'errordetails', type: 'string'},
                {arg: 'errormsg',     type: 'string'},
                {arg: 'severity',     type: 'string'}
            ],
            returns: {arg: 'log', type: 'string'}
        }
    );

};

Файл, вызывающий метод:

logdata = require('./server/server.js').models.datalog.logdata;
logdata('my test success', '', 'test success', 'info');

Почему loopback не передает обратный вызов?


person Geoffrey Burdett    schedule 09.04.2015    source источник
comment
На первый взгляд я не вижу ничего плохого. Можете ли вы проверить значения аргументов, переданные с помощью loopback в строке 4, чтобы узнать, является ли последний аргумент обратным вызовом? т.е.) console.log(arguments) в строке 4.   -  person superkhau    schedule 09.04.2015
comment
{'0': 'мой успешный тест', '1': '', '2': 'успешный тест', '3': 'информация'}   -  person Geoffrey Burdett    schedule 10.04.2015
comment
Похоже, что обратный вызов не передается в удаленный метод, но все данные выглядят так ... Можете ли вы также опубликовать URL-адрес, который вы нажимаете, в своем API и любом теле запроса?   -  person Jordan Kasper    schedule 10.04.2015
comment
В вопросе обновлено.   -  person Geoffrey Burdett    schedule 10.04.2015
comment
Думаю, я только что осознал проблему ... объект «возвращает» применяется только к запросу API, поэтому, если мне нужен обратный вызов при его прямом вызове, я должен предоставить этот обратный вызов, когда я его вызываю, не так ли?   -  person Geoffrey Burdett    schedule 10.04.2015


Ответы (2)


Да, удаленный метод применяется только к запросу через конечную точку API. Если вы вызываете его напрямую, предоставьте свой собственный обратный вызов.

person superkhau    schedule 10.04.2015

Для блага всех, кто это читает. Вы можете использовать loopback.lib.utils, чтобы создать для вас новую функцию обратного вызова.

Просто добавьте

const utils = require('loopback/lib/utils');

и внутри вашей функции

cb = cb || utils.createPromiseCallback();
person Sashi    schedule 23.03.2018