NodeJS 发送 POST 请求 curl -d & JS 类的静态属性使用

NodeJS 发送 POST 请求 curl -d & JS 类的静态属性使用

'use strict';

const Service = require('../lib/ServiceBase')
const tables = require('../lib/tables')
var http = require('http')
var querystring = require('querystring');

/**
 * 授权绑定淘宝服务 @author Jack
 * @class
 * @extends Canary.Service
 */
class WealtimePersonBindService extends Service {
  constructor(ctx) {
    super(ctx)
    WealtimePersonBindService.ctx = ctx;
  }

  get table() {
    return tables.wealtimePersonBind
  }

  /**
   * 淘宝授权绑定
   * @param item
   * @returns {null}
   */
  * add(item) {
    const me = this
    const user = this.user
    console.log(`user ===> ${JSON.stringify(user)}`)
    console.log(`item ===> ${JSON.stringify(item)}`)

    var code = item['code']
    console.log(`code ===> ${JSON.stringify(code)}`)
    var bindtype = item['bindtype']

    // curl -d "code=QOwnL6ukr3LJzz2r2uVJgFnz12673853&grant_type=authorization_code&client_id=24779841&client_secret=971a06012b81382350a26ae48c2ebe0d&redirect_uri=https://welare.alibaba-inc.com/#/profile" https://oauth.taobao.com/token
    var contents = querystring.stringify({
      code: code,
      grant_type: 'authorization_code',
      client_id: '24779841',
      client_secret: '971a06012b81382350a26ae48c2ebe0d',
      redirect_uri: 'https://welare.alibaba-inc.com/#/profile'
    });

    console.log(`post contents ===> ${contents}`);

    var options = {
      host: 'oauth.taobao.com',
      path: '/token',
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        //只有post时,这个才有用
        'Content-Length': contents.length
      }
    }

    var requestCallback = (response) => {
      response.setEncoding('utf-8');
      var receiveData = "";
      response.on('data', (chunk) => {
        receiveData += chunk;
      }).on('end', () => {
        console.log('getAccessToken body 分隔线---------------------------------\r\n');
        console.log(`accessToken ===> ${JSON.stringify(receiveData)}`);

        var accessToken = JSON.parse(receiveData)
        var taobao_user_id = accessToken.taobao_user_id
        var taobao_user_nick = accessToken.taobao_user_nick
        console.log(`taobao_user_id = ${taobao_user_id}`)
        console.log(`taobao_user_nick = ${taobao_user_nick}`)
        if (taobao_user_id && taobao_user_nick) {
          try {
            // 写入活动记录
            console.log('WealtimePersonBindService.ctx =========================>')
            console.dir(WealtimePersonBindService.ctx)
            console.log('WealtimePersonBindService.ctx.app.mysql =========================>')
            var mysql = WealtimePersonBindService.ctx.app.mysql
            console.dir(mysql)
            var ret = mysql.insert(me.table, {
              taobao_user_id: taobao_user_id,
              taobao_user_nick: taobao_user_nick,
              // 人员信息
              work_no: user['workid'],
              emp_name: user['lastName'],
              nick_name: user['name'],
              bind_type: bindtype,
              gmt_create: new Date(),
              gmt_modified: new Date(),
            });
            return ret.insertId
          } catch (e) {
            console.log(`[service.WealtimePersonBindService.add] ${e}`);
            throw e
          }
        }
      });
    };

    // post 请求 AccessToken
    var req = http.request(options, requestCallback).on('error', function (e) {
      console.log(e.message);
    });

    req.on('error', function (e) {
      console.log(`getAccessToken error ===> ${JSON.stringify(e)}`)
    });
    req.write(contents);
    req.end();
  }
}

WealtimePersonBindService.ctx;

module.exports = WealtimePersonBindService

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏行者悟空

利用zookeeper实现服务上线(离线)自动感知

3182
来自专栏c#开发者

BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式

BizTalk Orchestration Publish Host In-Process Wcf Service without IIS 多种供客户端调用方式...

3818
来自专栏A周立SpringCloud

Spring Cloud各组件调优参数

Tomcat配置参数 server: tomcat: max-connections: 0 max-threads: 0 Hystrix配...

5048
来自专栏Petrichor的专栏

sudo apt-get update 报错

4804
来自专栏Jerry的SAP技术分享

ABAP和Hybris的源代码生成工具

有两种方式,一种是ABAP Code Composer, 细节可以查看我的博客Step by Step to generate ABAP code automa...

3754
来自专栏岑玉海

Hadoop源码系列(一)FairScheduler申请和分配container的过程

1、如何申请资源 1.1 如何启动AM并申请资源 1.1.1 如何启动AM val yarnClient = YarnClient.createYarnClie...

4514
来自专栏xingoo, 一个梦想做发明家的程序员

LSP(分层服务提供者)

LSP本身是DLL,可以将它安装到winsock目录,以便创建套接字的应用程序不必知道此LSP的任何信息就能调用它。 运行原理: 套接字创建函数会在winso...

3315
来自专栏iOS122-移动混合开发研究院

【smart-transform】取自 Atom 的 babeljs/coffeescript/typescript 智能转 es5 库

简介 有时间研究下开源库的源码,总是会有些收获的。注意到 Atom 插件编写时,可以直接使用 babel, coffeescript 或者 typescript...

2236
来自专栏大内老A

如何利用ETW(Event Tracing for Windows)记录日志

ETW是Event Tracing for Windows的简称,它是Windows提供的原生的事件跟踪日志系统。由于采用内核(Kernel)层面的缓冲和日志记...

4186
来自专栏散尽浮华

Linux系统下的用户密码设定梳理

随着linux使用的普遍,对于linux用户以及系统的安全要求越来越高,而用户密码复杂程度是系统安全性高低的首要体现。因此如何对linux下用户的密码进行规则限...

3189

扫码关注云+社区

领取腾讯云代金券