javascript 使用请求模块处理API响应的正确方法[已关闭]

cu6pst1q  于 2023-11-15  发布在  Java
关注(0)|答案(1)|浏览(109)

已关闭。此问题为opinion-based。目前不接受回答。
**要改进此问题吗?**更新此问题,以便editing this post可以使用事实和引文来回答。

15小时前就关门了
Improve this question
我几乎只使用Request module来从我的Node.JS代码中调用API。它健壮、全面、维护良好。
然而,我发现自己每次调用API时都会编写以下3路if的一些变体:

  1. request.get(uri, function(error, response, body) {
  2. if(error) {
  3. //Request error
  4. callback(error, null);
  5. }
  6. else if(response.statusCode !== myExpectedStatusCode) {
  7. //API error
  8. callback({error: new Error('HTTP ' + response.statusCode)});
  9. }
  10. else {
  11. //Yay! got payload!!!!
  12. callback(null, body);
  13. }
  14. });

字符串
这导致了各种意想不到的边缘情况,以及每次调用多个测试用例。有没有更简单、更优雅的方法来处理API调用?
或者,是否可以向Request传递一个参数,告诉它在状态码与某个值/多个值不匹配时返回一个Error对象?这样我至少可以跳过第二个if

inn6fuwd

inn6fuwd1#

写一个共享处理函数如下:

  1. function apiResponse(callback, myExpectedStatusCode, error, response, body) {
  2. if (error) {
  3. //Request error
  4. callback(error, null);
  5. return;
  6. }
  7. myExpectedStatusCode = myExpectedStatusCode || 200;
  8. if (response.statusCode !== myExpectedStatusCode) {
  9. //API error
  10. callback({
  11. error: new Error('HTTP ' + response.statusCode)
  12. });
  13. return;
  14. }
  15. //Yay! got payload!!!!
  16. callback(null, body);
  17. }

字符串
像这样使用它:

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

展开查看全部

相关问题