Выброс ошибки в node.js

У меня есть крошечный модуль, который действует как модель для моих данных. Он находится между моими маршрутами и моей базой данных для конкретных данных (данные пользователя в моем случае).

Мне нужен этот модуль в коде маршрута, вызывается метод subscribe который у него есть, и который подписывает пользователя на конкретный список рассылки, сохраняя необходимые данные в моей базе данных. Ура!

Мой метод "подписаться" принимает имя электронной почты и идентификатор списка адресов электронной почты в виде двух параметров. Разумно, что я буду делать код неаккуратно и быстро, и введите идентификатор для списка, который не существует. Неправильная ошибка.

Как я могу сбросить ошибку и указать номер строки с этим неправильным идентификатором?

Код внутри модели /user.js:

if (emailLists.indexOf(listId) === -1) {
  throw new Error('listId does not exist');
}

Код изнутри route.js:

user.subscribe('[email protected]', 'knewsletterr', function (error, success) {
  if (error) { return sendResponse(500, 'Ahhhhhhh!'); }
  if (!error) { return sendResponse(200, 'subscribed'); }
});

Прямо сейчас, я получаю:

/home/.../project/models/user.js:85
if (emailLists.indexOf(listId) === -1) { throw new Error('listId does not exist'); }
                                                   ^
Error: listId does not exist

Ответ 1

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

// divide with callback
function div (x, y, done) {
  if (y === 0)
    return done (Error ('Cannot divide by zero'))
  else
    return done (null, x / y)
}

div (6, 3, function (err, result) {
  // *always* check for err
  if (err)
    console.log ('error', err.message, err.stack)
  else
    console.log ('result', result)
})

Ответ 2

Это поможет вам!

var el = document.getElementById('el');

var log = function( val ){
  el.innerHTML+= '<div><pre>' + val + '</pre></div>';
};


try {
  
  throw Error('error in code');
  
} catch (e) {

  log( e.message );
  log( e.fileName );
  log( e.lineNumber );
  log( e.stack );

};
<div id='el'></div>