2016-11-12 2 views
0

Посмотрите, как это уродливо. Это было какое-то время, когда я делаю это, что-то еще мое приложение падает, когда я небрежен. Как избавиться от двойного, если здесь? Я должен проверить, имеет ли результат что-то в первую очередь, мое приложение выйдет из строя, потому что используемое свойство не определено. Я думаю, что это общая боль в js.Обработка ошибок Node.js для проверки значения свойства

module.exports.verify_email_and_token = function(req,res,next){ 
    Stripe_token.verify(req.body.email, req.body.token, function(err,result){ 
     if(result){ 
      if(result.used == 0){ 
       res.json(1); // 1 mean succeed 
      } 
     }else{ 
      res.json(0) // 0 mean failed 
     } 
    }); 
} 

Выше кода нет ошибки, просто я ищу более эффективный способ ее написать.

+0

Почему вы просто не возвращать 'res.json (результат)' в случае успеха и 'res.json (ERR)' в случае ошибки? Я предполагаю, что вы возвращаете объекты. – AndreaM16

+0

Я использую mongoose, так как findOneAndUpdate не вернет никакого err, результат будет null, а не err. –

+0

Вы можете попробовать создать промежуточное программное обеспечение, например, фабрику. Там вы выполняете свои чеки. Например, выполните запрос, если не определено, тогда 'return reject (ошибка:« описание ошибки »)' else' return resolve (whatYouFound) '. Тогда вы можете поймать их, как я сказал вам в предыдущем комментарии. – AndreaM16

ответ

0

Вот более сокращенный вариант с использованием функций со стрелок (доступных в узле 6.0+):

module.exports.verify_email_and_token = function(req,res,next) { 
    Stripe_token.verify(req.body.email, req.body.token, 
    res => res.json(result && result.used ? 1 : 0)); 

Семантики немного отличается, но я думаю, что он исправляет ошибку в коде выше. Теперь, если есть result, а used свойство является ложным, то 0 отправляется res.json().

В вашем коде в этой ситуации res.json никогда не вызывается.

+0

slick using && метод внутри функции –

0

Вы можете назначить результат на объект, таким образом, объект существует заранее, избегая один если.

module.exports.verify_email_and_token = function(req,res,next){ 
    Stripe_token.verify(req.body.email, req.body.token, function(err,result){ 
      const _result = Object.assign({}, result); 
      if(_result.used == 0){ 
       res.json(1); // 1 mean succeed 
      } 
      else{ 
       res.json(1); 
      } 

    }); 
} 
Смежные вопросы