Ошибки, выдаваемые методами Meteor-сервера, не регистрируют исходную трассировку стека - PullRequest
1 голос
/ 05 июня 2019

После обновления до meteor 1.8.0.2 с версии 1.6.x я заметил, что любой вызов метода, который приводит к ошибке, печатается на консоли сервера как:

Exception while invoking method 'login' [object Object]
Exception while invoking method 'customMethodByMe' [object Object]

Это происходит как при разработке на моем Mac, так и при развертывании в Galaxy.

Раньше была напечатана вся трассировка стека, но это ведение журнала объектов не помогло мне разобраться в реальной проблеме. Мое решение до сих пор заключалось в том, чтобы обернуть реализацию метода в оператор try catch, который регистрирует исходное исключение и сбрасывает его, чтобы клиент знал.

Meteor.methods({
  'customMethodByMe'() {
    try {
      return customMethodByMeImpl();
    } catch (e) {
      console.log(e)
      throw e;
    }
  }
});

В этом случае, так как ошибка в методе login, который находится в пакете, я не могу обновить его, чтобы напечатать реальную проблему. На клиенте все, что я получаю при любой ошибке, - это то, что на сервере произошла ошибка 500, поэтому также нет основной причины.

{"isClientSafe":true,"error":500,"reason":"Internal server error","message":"Internal server error [500]","errorType":"Meteor.Error"}

Есть идеи, как временно решить эту проблему? Я искал обработчик ошибок на уровне сервера, но пока ничего не нашел.

спасибо

1 Ответ

0 голосов
/ 05 июня 2019

Я не смог испытать это напрямую, но когда мне нужно напечатать объект, я обычно использую JSON.stringfy.

Meteor.methods({
  'customMethodByMe'() {
    try {
      return customMethodByMeImpl();
    } catch (e) {
      console.log(JSON.stringify(e));
      throw e;
    }
  }
});

Это должно решить, чтобы вы могли хотя бы прочитать журнал ошибок.

...