使用Request模块处理API响应的正确方法

时间:2015-05-07 15:54:26

标签: node.js api coding-style

我几乎只使用Request module来调用我的Node.JS代码中的API。它健壮,全面,维护良好。

但是,每次调用API时,我都会发现自己正在编写以下3路if的变体:

request.get(uri, function(error, response, body) {
  if(error) {
    //Request error
    callback(error, null);
  }
  else if(response.statusCode !== myExpectedStatusCode) {
    //API error
    callback({error: new Error('HTTP ' + response.statusCode)});
  }
  else {
    //Yay! got payload!!!!
    callback(null, body);
  }
});

这会导致各种意外的边缘情况,并且每次调用都会有多个测试用例。是否有更简单,更优雅的方式来处理API调用?

或者,当状态代码与值/多个值不匹配时,是否可以将参数传递给Request,告诉它返回Error对象?那样我至少可以跳过第二个if

1 个答案:

答案 0 :(得分:0)

写一个共享处理函数a la:

function apiResponse(callback, myExpectedStatusCode, error, response, body) {
  if (error) {
    //Request error
    callback(error, null);
    return;
  }
  myExpectedStatusCode = myExpectedStatusCode || 200;
  if (response.statusCode !== myExpectedStatusCode) {
    //API error
    callback({
      error: new Error('HTTP ' + response.statusCode)
    });
    return;
  }
  //Yay! got payload!!!!
  callback(null, body);
}

像这样使用它:

request.get(uri, apiResponse.bind(null, callback, 201));