nodejs使用fetch获取WebAPI
在上一篇《Nodejs获取Azure Active Directory AccessToken》中,已经获取到了accessToken,现时需要获取WebAPI的数据,选择了node-fetch来获取数据
node-fetch是使用promise的写法,对于习惯了promise写法的人来说,还是非常容易的
这里提醒一下,公司上网是通过代理的方式来上网的,那么在获取外网的地址时,如果没通过代理,则获取不到数据,在这里,我加入了代理node-https-proxy-agent,关于使用,可以看文章最后的参考地址
- var fetch = require('node-fetch');
- var defaultConfig = require('../config/default.json');
- var HttpsProxyAgent = require('https-proxy-agent');
- module.exports = {
- searchGarmentStyle: function (garmentStyleNo, access_token) {
- var queryEntity = {
- "filterType": "LEAF",
- "filters": [{}],
- "attributeName": "item_number",
- "searchOperator": "eq",
- "filterValue": garmentStyleNo
- }
- var garmentstyles = [];
- // Set up the request
- return new Promise(function (resolve, reject) {
- try {
- //-------------------------------------------------------------------------------------------------------------
- fetch(defaultConfig.apiUrl.getGarmentStyleSigleApi,
- {
- agent: new HttpsProxyAgent('http://192.168.27.4:8083'),
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'Accept': 'application/json',
- 'Authorization': 'Bearer ' + access_token
- },
- body: JSON.stringify(queryEntity)
- })
- .then((response) => {
- return response.json();
- })
- .then((responseJsonData) => {
- var getresponse = responseJsonData;
- if (getresponse.resultType === "SUCCESS") {
- if (getresponse.results) {
- if (getresponse.results[0].data) {
- var getdata = getresponse.results[0].data;
- for (let i = 0; i < getdata.length; i++) {
- garmentstyles.push(getdata[i]);
- }
- resolve(garmentstyles);
- }
- else {
- reject(new Error('WebAPI Error :resultType.results[0].data Value Is Null Or Empty'));
- }
- }
- else {
- reject(new Error('WebAPI Error :resultType.results Value Is Null Or Empty'));
- }
- }
- else {
- reject(new Error('WebAPI Error :resultType Value Is ' + getresponse.resultType));
- }
- })
- .catch((error) => {
- reject(new Error('WebAPI Error :' + error.message));
- });
- } catch (e) {
- reject(e);
- }
- });
- }
- };
调用(这里与获取token的方法进行合并):
- var garmentstyle_helper = require('./service/garment_style_search');
- //get token
- adal_manage.getToken()
- .then((token_object) => {
- // console.log(token_object.accessToken);
- //call webapi
- garmentstyle_helper
- .searchGarmentStyle(garmentStyleNo, token_object.accessToken)
- .then((GarmentStyles) => {
- if (GarmentStyles && GarmentStyles.length > 0) {
- //foreach data
- for (var getstyle of GarmentStyles) {
- // add message
- var message = new builder.Message()
- .text(getstyle.linePlanProducts.productID + '(' + getstyle.linePlanProducts.productVersion + getstyle.linePlanProducts.productVersionSerialNo + ')')
- .attachmentLayout(builder.AttachmentLayout.carousel)
- .attachments(getstyle.linePlanProducts.productMaterialConfigs.map(garmentStyleColorwayAttachment));
- session.send(message);
- }
- session.endDialog();
- }
- else {
- // no found
- session.send('can not found garment style \"%s\"', garmentStyleNo);
- session.endDialog();
- }
- },
- (err) => {
- session.send('[searchGarmentStyle Error:]' + err.message ? err.message : '');
- session.endDialog();
- });
- }, (error) => {
- session.send('[getToken Error:]' + err.message ? err.message : '');
- session.endDialog();
- });
参考:https://github.com/bitinn/node-fetch
https://github.com/TooTallNate/node-https-proxy-agent
nodejs使用fetch获取WebAPI的更多相关文章
- nodejs 通过 get获取数据修改redis数据
如下代码是没有报错的正确代码 我通过https获取到数据 想用redis set一个键值存储 现在我掉入了回调陷阱res.on 里面接收到的数据是data 里面如果放入 client.on('conn ...
- fetch获取json的正确姿势
fetch要求参数传递,遇到请求无法正常获取数据,网上其他很多版本类似这样: fetch(url ,{ method: 'POST', headers:{ 'Accept': 'application ...
- react native android 上传文件,Nodejs服务端获取上传的文件
React Native端 使用react-native-image-picker 做出选择图片的操作,选择完成后,直接将图片Post至服务器,保存在服务器的某个地方(保存图片的路径需要公开显示),并 ...
- nodejs异常处理过程/获取nodejs异常类型/写一个eggjs异常处理中间件
前言 今天想写一下eggjs的自定义异常处理中间件,在写的时候遇到了问题,这个错误我捕获不到类型?? 处理过程,不喜欢看过程的朋友请直接看解决方法和总结 看一下是什么: 抛出的异常是检验失败异常Val ...
- nodejs微信开发获取token,ticket-1
/* jshint -W079 */ /* jshint -W020 */ "use strict"; var _ = require("lodash"); v ...
- nodejs从服务器获取数据
// 从服务器获取数据 request('http://192.168.1.7:8080/getDemo', function(error, response, body) { console.log ...
- nodejs 不同请求获取前端传的参数
get方法 参数在req.query中获取 router.get('/', function(req, res, next) { console.log("reqquery:",r ...
- 怎么获取WebAPI项目中图片在服务端的路径
1.这是我的项目结构. 2.路径格式为:[http://服务器域名/文件夹/文件.扩展名] 测试:假如我要获取到[logo_icon.jpg]这张图.在浏览器的地址栏中输入上面那个格式的路径. 3.可 ...
- nodejs gulp如何获取参数
比如执行gulp test 如果需要获取test,使用命令process.argv即可 如果执行gulp test --module aaaa,这句话表示的意思执行gulp test,顺带参数modu ...
随机推荐
- 简述jq中attr()和prop()的区别
attr,prop都是属性的意思,那他们有什么区别呢?我们先来看一下jquery的部分源码: attr部分: attr: function( elem, name, value, pass ) { v ...
- 转:maven常用命令介绍
mvn 3.0.4 创建maven项目命令 mvn archetype:generate -DgroupId=damocles-autocredit -DartifactId=damocles ...
- BZOJ2437 NOI2011兔兔与蛋蛋(二分图匹配+博弈)
首先将棋盘黑白染色,不妨令空格处为黑色.那么移动奇数次后空格一定处于白色格子,偶数次后空格一定处于黑色格子.所以若有某个格子的棋子颜色与棋盘颜色不同,这个棋子就是没有用的.并且空格与某棋子交换后,棋子 ...
- BZOJ4513 SDOI2016储能表(数位dp)
如果n.m.k都是2的幂次方,答案非常好统计.于是容易想到数位dp,考虑每一位是否卡限制即可,即设f[i][0/1][0/1][0/1]为第i位是/否卡n.m.k的限制时,之前的位的总贡献:g[i][ ...
- hihoCoder #1872 : Pythagorean triple
此题是 2018 年 ICPC Asia Beijing Regional Contest 的 C 题. 题目大意 求斜边长度不超过 $n$($ n \le 10^9$) 的勾股数的数量.不计两直角边 ...
- [洛谷P2482][SDOI2010]猪国杀
题目大意:猪国杀,又一道大模拟题 题解:模拟,对于一个没有玩过三国杀的人来说,一堆细节不知道,写的十分吃力 卡点:无数,不想说什么了,这告诉我要多玩游戏 C++ Code: #include < ...
- [Leetcode] Wildcard matching 通配符匹配
Implement wildcard pattern matching with support for'?'and'*'. '?' Matches any single character. '*' ...
- 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 ...
- sql异常-The used SELECT statements have a different number of columns
两个或多个select查询进行union时,查询的列不对应.两个select进行union时,两个select的查询出的列必须相对应.
- jQuery知识点:attr与prop的区别
做项目时遇到个莫名的问题,全选的时候仅第一次有效,再次点击全选按钮是无效了,查了查原因,看到篇很不错的文章,问题出在jquery中的attr属性上,这里做下笔记. 原文链接:http://www.cn ...