Выброс ошибки в 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>