在上一篇《Nodejs获取Azure Active Directory AccessToken》中,已经获取到了accessToken,现时需要获取WebAPI的数据,选择了node-fetch来获取数据

node-fetch是使用promise的写法,对于习惯了promise写法的人来说,还是非常容易的

这里提醒一下,公司上网是通过代理的方式来上网的,那么在获取外网的地址时,如果没通过代理,则获取不到数据,在这里,我加入了代理node-https-proxy-agent,关于使用,可以看文章最后的参考地址

  1. var fetch = require('node-fetch');
  2. var defaultConfig = require('../config/default.json');
  3. var HttpsProxyAgent = require('https-proxy-agent');
  4.  
  5. module.exports = {
  6. searchGarmentStyle: function (garmentStyleNo, access_token) {
  7. var queryEntity = {
  8. "filterType": "LEAF",
  9. "filters": [{}],
  10. "attributeName": "item_number",
  11. "searchOperator": "eq",
  12. "filterValue": garmentStyleNo
  13. }
  14.  
  15. var garmentstyles = [];
  16. // Set up the request
  17. return new Promise(function (resolve, reject) {
  18. try {
  19. //-------------------------------------------------------------------------------------------------------------
  20.  
  21. fetch(defaultConfig.apiUrl.getGarmentStyleSigleApi,
  22. {
  23. agent: new HttpsProxyAgent('http://192.168.27.4:8083'),
  24. method: 'POST',
  25. headers: {
  26. 'Content-Type': 'application/json',
  27. 'Accept': 'application/json',
  28. 'Authorization': 'Bearer ' + access_token
  29. },
  30. body: JSON.stringify(queryEntity)
  31. })
  32. .then((response) => {
  33. return response.json();
  34. })
  35. .then((responseJsonData) => {
  36. var getresponse = responseJsonData;
  37. if (getresponse.resultType === "SUCCESS") {
  38. if (getresponse.results) {
  39. if (getresponse.results[0].data) {
  40. var getdata = getresponse.results[0].data;
  41.  
  42. for (let i = 0; i < getdata.length; i++) {
  43. garmentstyles.push(getdata[i]);
  44. }
  45. resolve(garmentstyles);
  46. }
  47. else {
  48. reject(new Error('WebAPI Error :resultType.results[0].data Value Is Null Or Empty'));
  49. }
  50. }
  51. else {
  52. reject(new Error('WebAPI Error :resultType.results Value Is Null Or Empty'));
  53. }
  54. }
  55. else {
  56. reject(new Error('WebAPI Error :resultType Value Is ' + getresponse.resultType));
  57. }
  58. })
  59. .catch((error) => {
  60. reject(new Error('WebAPI Error :' + error.message));
  61. });
  62.  
  63. } catch (e) {
  64. reject(e);
  65. }
  66.  
  67. });
  68. }
  69. };

调用(这里与获取token的方法进行合并):

  1. var garmentstyle_helper = require('./service/garment_style_search');
  2.  
  3. //get token
  4. adal_manage.getToken()
  5. .then((token_object) => {
  6. // console.log(token_object.accessToken);
  7. //call webapi
  8. garmentstyle_helper
  9. .searchGarmentStyle(garmentStyleNo, token_object.accessToken)
  10. .then((GarmentStyles) => {
  11. if (GarmentStyles && GarmentStyles.length > 0) {
  12. //foreach data
  13. for (var getstyle of GarmentStyles) {
  14. // add message
  15. var message = new builder.Message()
  16. .text(getstyle.linePlanProducts.productID + '(' + getstyle.linePlanProducts.productVersion + getstyle.linePlanProducts.productVersionSerialNo + ')')
  17. .attachmentLayout(builder.AttachmentLayout.carousel)
  18. .attachments(getstyle.linePlanProducts.productMaterialConfigs.map(garmentStyleColorwayAttachment));
  19.  
  20. session.send(message);
  21. }
  22.  
  23. session.endDialog();
  24. }
  25. else {
  26. // no found
  27. session.send('can not found garment style \"%s\"', garmentStyleNo);
  28. session.endDialog();
  29. }
  30. },
  31. (err) => {
  32. session.send('[searchGarmentStyle Error:]' + err.message ? err.message : '');
  33. session.endDialog();
  34. });
  35. }, (error) => {
  36. session.send('[getToken Error:]' + err.message ? err.message : '');
  37. session.endDialog();
  38. });

参考:https://github.com/bitinn/node-fetch

https://github.com/TooTallNate/node-https-proxy-agent

nodejs使用fetch获取WebAPI的更多相关文章

  1. nodejs 通过 get获取数据修改redis数据

    如下代码是没有报错的正确代码 我通过https获取到数据 想用redis set一个键值存储 现在我掉入了回调陷阱res.on 里面接收到的数据是data 里面如果放入 client.on('conn ...

  2. fetch获取json的正确姿势

    fetch要求参数传递,遇到请求无法正常获取数据,网上其他很多版本类似这样: fetch(url ,{ method: 'POST', headers:{ 'Accept': 'application ...

  3. react native android 上传文件,Nodejs服务端获取上传的文件

    React Native端 使用react-native-image-picker 做出选择图片的操作,选择完成后,直接将图片Post至服务器,保存在服务器的某个地方(保存图片的路径需要公开显示),并 ...

  4. nodejs异常处理过程/获取nodejs异常类型/写一个eggjs异常处理中间件

    前言 今天想写一下eggjs的自定义异常处理中间件,在写的时候遇到了问题,这个错误我捕获不到类型?? 处理过程,不喜欢看过程的朋友请直接看解决方法和总结 看一下是什么: 抛出的异常是检验失败异常Val ...

  5. nodejs微信开发获取token,ticket-1

    /* jshint -W079 */ /* jshint -W020 */ "use strict"; var _ = require("lodash"); v ...

  6. nodejs从服务器获取数据

    // 从服务器获取数据 request('http://192.168.1.7:8080/getDemo', function(error, response, body) { console.log ...

  7. nodejs 不同请求获取前端传的参数

    get方法 参数在req.query中获取 router.get('/', function(req, res, next) { console.log("reqquery:",r ...

  8. 怎么获取WebAPI项目中图片在服务端的路径

    1.这是我的项目结构. 2.路径格式为:[http://服务器域名/文件夹/文件.扩展名] 测试:假如我要获取到[logo_icon.jpg]这张图.在浏览器的地址栏中输入上面那个格式的路径. 3.可 ...

  9. nodejs gulp如何获取参数

    比如执行gulp test 如果需要获取test,使用命令process.argv即可 如果执行gulp test --module aaaa,这句话表示的意思执行gulp test,顺带参数modu ...

随机推荐

  1. 简述jq中attr()和prop()的区别

    attr,prop都是属性的意思,那他们有什么区别呢?我们先来看一下jquery的部分源码: attr部分: attr: function( elem, name, value, pass ) { v ...

  2. 转:maven常用命令介绍

    mvn 3.0.4 创建maven项目命令  mvn  archetype:generate   -DgroupId=damocles-autocredit -DartifactId=damocles ...

  3. BZOJ2437 NOI2011兔兔与蛋蛋(二分图匹配+博弈)

    首先将棋盘黑白染色,不妨令空格处为黑色.那么移动奇数次后空格一定处于白色格子,偶数次后空格一定处于黑色格子.所以若有某个格子的棋子颜色与棋盘颜色不同,这个棋子就是没有用的.并且空格与某棋子交换后,棋子 ...

  4. BZOJ4513 SDOI2016储能表(数位dp)

    如果n.m.k都是2的幂次方,答案非常好统计.于是容易想到数位dp,考虑每一位是否卡限制即可,即设f[i][0/1][0/1][0/1]为第i位是/否卡n.m.k的限制时,之前的位的总贡献:g[i][ ...

  5. hihoCoder #1872 : Pythagorean triple

    此题是 2018 年 ICPC Asia Beijing Regional Contest 的 C 题. 题目大意 求斜边长度不超过 $n$($ n \le 10^9$) 的勾股数的数量.不计两直角边 ...

  6. [洛谷P2482][SDOI2010]猪国杀

    题目大意:猪国杀,又一道大模拟题 题解:模拟,对于一个没有玩过三国杀的人来说,一堆细节不知道,写的十分吃力 卡点:无数,不想说什么了,这告诉我要多玩游戏 C++ Code: #include < ...

  7. [Leetcode] Wildcard matching 通配符匹配

    Implement wildcard pattern matching with support for'?'and'*'. '?' Matches any single character. '*' ...

  8. Educational Codeforces Round 54 (Rated for Div. 2) ABCD

    A. Minimizing the String time limit per test 1 second memory limit per test 256 megabytes Descriptio ...

  9. sql异常-The used SELECT statements have a different number of columns

    两个或多个select查询进行union时,查询的列不对应.两个select进行union时,两个select的查询出的列必须相对应.

  10. jQuery知识点:attr与prop的区别

    做项目时遇到个莫名的问题,全选的时候仅第一次有效,再次点击全选按钮是无效了,查了查原因,看到篇很不错的文章,问题出在jquery中的attr属性上,这里做下笔记. 原文链接:http://www.cn ...