2015-10-12 3 views
5

методологический вопрос:Node.js: Должен ли я хранить `assert()` s в производственном коде?

Я реализующий интерфейс API для некоторых услуг, с помощью Node.js, MongoDB и express.js.

На многих (почти все) сайты я вижу такой код:

method(function(err, data) { 
    assert.equal(null, err); 
}); 

Вопрос: Я должен держать assert заявления в мой код во время производства (по крайней мере, на наличие ошибок «низкой значимости»)? Или, это только для тестирования кода, и я должен лучше обрабатывать все ошибки каждый раз?

ответ

1

вероятно, не

ссылка: When should assertions stay in production code?

В основном в моем коде я поставил функцию обработки ошибок в отдельном файле, и использовать тот же метод ошибки везде, она во многом зависит от логики в любом случае

как госзакупках как правило, забывают об этом

process.on('uncaughtException', function (err) { 
    console.log(err); 
}) 

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

+0

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

4

Вы окончательно не должны хранить их в продукции окружающей среды.

Если вы немного рекламируете Google, существует множество альтернативных подходов к их изъятию.

Лично я использовал шаблон null object, выполнив два обертки в отдельном файле: первый сопоставляет свой метод непосредственно с тем, который был экспортирован модулем assert, последний предлагает пустые функции и ничего более.

Таким образом, во время выполнения вы можете подключить правый, полагаясь на некоторую глобальную переменную, предварительно установленную правильно, например process.env.mode. В ваших файлах вам нужно будет только импортировать вышеупомянутый модуль и использовать его вместо прямого использования assert.

Таким образом, вокруг вашего кода вы никогда не увидите, как подвержен ошибкам материал, такой как myAssert && myAssert(cond), вместо этого у вас будет когда-либо более чистый и безопасный оператор myAssert(cond).

Отсюда следует краткий пример:

// myassert.js 
var assert = require('assert'); 
if('production' === process.env.mode) { 
    var nil = function() { }; 
    module.exports = { 
     equal = nil; 
     notEqual = nil; 
     // all the other functions 
    }; 
} else { 
    // a wrapper like that one helps in not polluting the exported object 
    module.exports = { 
     equal = function(actual, expected, message) { 
      assert.equal(actual, expected, message); 
     }, 
     notEqual = function(actual, expected, message) { 
      assert.notEqual(actual, expected, message); 
     }, 
     // all the other functions 
    } 
} 


// another_file.js 
var assert = require('path_to_myassert/myassert'); 
// ... your code 
assert(true, false); 
// ... go on 
+0

Не могли бы вы рассказать о том, почему их не следует хранить в производственной среде? –

+0

@SanghyunLee Выражения, которые вы используете в рамках assert, могут быть сложными и обычно вы не хотите тратить цикл процессора на то, что вам не нужно в производстве. – skypjack

+0

относительно последнего, вы имеете в виду, что можно ввести ошибку, используя 'assert', правильно? –

Смежные вопросы