如何从请求npm包中合并我的错误?

时间:2014-05-18 13:04:21

标签: express refactoring

到目前为止,我有:

request(opts, function(err, response, body) {
  var user;
  if (err) {
    throw err;
  }
  if (response.statusCode !== 200) {
    throw 'Invalid statusCode';
  }
  if (body.status !== 'ok') {
    throw body.error;
  }
  return user = body.user;
});

这看起来有点冗长,有没有办法整合这段代码?

1 个答案:

答案 0 :(得分:1)

并没有太大的改进(更像是代码高尔夫),但这里是一个使用短路逻辑运算符的例子Javascript:

request(opts, function(err, response, body) {
    err = err || 
        (response.statusCode !== 200 && 'Invalid statusCode') ||
        (body.status !== 'ok' && (body.error || 'not ok'));

    if (err) throw err;

    return body.user;
});

另一种方法是编写一个包装器来整合错误,如果问题是在多个地方进行相同的错误处理:

function request_wrapped(opts, callback) {

    request(opts, function(err, response, body) {
        if (!err && response.statusCode !== 200) {
            err = 'Invalid statusCode';
        }
        if (!err && body.status !== 'ok') {
            err = body.error;
        }
        callback(err, response, body);
    });
}

然后,您将调用request_wrapped而不是request,只需检查回调中的err参数,如下所示:

request_wrapped(opts, function(err, response, body) {
    if (err) throw err;
    return body.user;
});