LINUX.ORG.RU

[node.js] Custom exception handling


0

1

Заинтересовался я тут проблемой формирования и обработки исключений для сабжевого фреймворка. На стековерфлов имеются некоторые намеки как это можно сделать.

Существует ли элегантный способ?

Вот собственно недорешение:

#!/usr/bin/env node

function defineException(name, parent) {
  var _parent = (parent || Error);
  var ex = function(message) {
    _parent.call(this);
    _parent.captureStackTrace(this, this.constructor);
    this.name = (this.constructor.name || this._name);
    this.message = (message || '');
  }
  ex.prototype.__proto__ = _parent.prototype;
  ex.prototype._parent = _parent;
  ex.prototype._name = name;
  //return ex;
  global[name] = ex;
}

//var EvilError = defineException();
defineException('EvilError');

function lol() {
  console.log('lol. start');
  throw new EvilError('smth very bad!');
  console.log('lol. end');
}

try {
  //throw new Error('ololo');
  lol();
}
catch (err) {
  if (err instanceof EvilError) {
    console.log('>:E 13/666');
    console.log('name:    %s\nmessage: %s\nstack:   %s',
      err.name, err.message, err.stack);
  } else {
    console.log('name:    %s\nmessage: %s\nstack:   %s',
      err.name, err.message, err.stack);
  }
}

также хотелось бы узнать как принято делать всякие там классы с наследованиями, с паблик/прайвит/протектид методами и пропертями

dismal_faun ★★ ()
Ответ на: комментарий от dismal_faun

Я не понял, в чем вопрос с исключениями на ноде. Там используются callbacks, с ошибкой в первом параметре. Смешивать callbacks и exceptions - очень хреновая идея.

Vit ★★★★★ ()
Ответ на: комментарий от dismal_faun

с паблик/прайвит/протектид методами и пропертями

так же как и везде в жс. Не бороться, а просто забить :)

http://www.anzaan.com/2009/05/javascript-variable-scope-private-protected-and...

в кофескрипте можно сделать так:

http://www.timjrobinson.com/coffeescript/coffeescript-classes-and-public-priv...

и вообще, юзай, короче, кофескрипт :)

Существует ли элегантный способ?

нет. только недорешения.

http://benno.id.au/blog/2011/08/08/nodejs-exceptions

stevejobs ★★★★☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.