Giter VIP home page Giter VIP logo

tencentcloud-sdk-nodejs's Introduction

简介

欢迎使用腾讯云开发者工具套件(SDK),NODEJS SDK 4.0 是云 API 3.0 平台的配套工具。目前已经支持 cvm、vpc、cbs 等产品,后续所有的云服务产品都会接入进来。新版 SDK 实现了统一化,具有各个语言版本的 SDK 使用方法相同,接口调用方式相同,统一的错误码和返回包格式这些优点。 为方便 NODEJS 开发者调试和接入腾讯云产品 API,这里向您介绍适用于 NODEJS 的腾讯云开发工具包,并提供首次使用开发工具包的简单示例。让您快速获取腾讯云 NODEJS SDK 并开始调用。

依赖环境

  1. NODEJS 10.0.0 版本及以上
  2. 从腾讯云控制台 开通相应产品
  3. 获取 SecretID、SecretKey 以及调用地址(endpoint),endpoint 一般形式为*.tencentcloudapi.com,如 CVM 的调用地址为 cvm.tencentcloudapi.com,具体参考各产品说明。

获取安装

安装 NODEJS SDK 前,先获取安全凭证。在第一次使用云 API 之前,用户首先需要在腾讯云控制台上申请安全凭证,安全凭证包括 SecretID 和 SecretKey, SecretID 是用于标识 API 调用者的身份,SecretKey 是用于加密签名字符串和服务器端验证签名字符串的密钥。SecretKey 必须严格保管,避免泄露。

通过 Npm 安装

通过 npm 获取安装是使用 NODEJS SDK 的推荐方法,npm 是 NODEJS 的包管理工具。关于 npm 详细可参考 npm 官网

  1. 执行以下安装命令:

    npm install tencentcloud-sdk-nodejs --save

  2. 在您的代码中引用对应模块代码,可参考示例。
  3. 如上引用方式会将腾讯云所有产品sdk下载到本地,可以将tencentcloud-sdk-nodejs换成tencentcloud-sdk-nodejs-cvm/cbs/vpc等,即可引用特定产品的sdk,代码中可将require("tencentcloud-sdk-nodejs")改为require("tencentcloud-sdk-nodejs-cvm/cbs/vpc"),其余不变,可参考示例,可大大节省存储空间。

通过源码包安装

  1. 前往 Github 仓库 或者 Gitee 仓库 下载源码压缩包。
  2. 解压源码包到您项目合适的位置,例如 sdk/tencentcloud-sdk-nodejs
  3. 执行 npm install ./sdk/tencentcloud-sdk-nodejs
  4. 使用 require("tencentcloud-sdk-nodejs") 的方式引入sdk,具体可参考示例。

示例

const tencentcloud = require("tencentcloud-sdk-nodejs")

// 导入对应产品模块的client models。
const CvmClient = tencentcloud.cvm.v20170312.Client

// 实例化要请求产品(以cvm为例)的client对象
const client = new CvmClient({
  // 为了保护密钥安全,建议将密钥设置在环境变量中或者配置文件中,请参考本文凭证管理章节。
  // 硬编码密钥到代码中有可能随代码泄露而暴露,有安全隐患,并不推荐。
  credential: {
    secretId: process.env.TENCENTCLOUD_SECRET_ID,
    secretKey: process.env.TENCENTCLOUD_SECRET_KEY,
  },
  // 产品地域
  region: "ap-shanghai",
  // 可选配置实例
  profile: {
    signMethod: "TC3-HMAC-SHA256", // 签名方法
    httpProfile: {
      reqMethod: "POST", // 请求方法
      reqTimeout: 30, // 请求超时时间,默认60s
      headers: {
        // 自定义 header
      },
      // proxy: "http://127.0.0.1:8899" // http请求代理
    },
  },
})
// 通过client对象调用想要访问的接口(Action),需要传入请求对象(Params)以及响应回调函数
// 即:client.Action(Params).then(res => console.log(res), err => console.error(err))
// 如:查询云服务器可用区列表
client.DescribeZones().then(
  (data) => {
    console.log(data)
  },
  (err) => {
    console.error("error", err)
  }
)

在支持 typescript 项目中,采用如下方式调用

import * as tencentcloud from "tencentcloud-sdk-nodejs"

const CvmClient = tencentcloud.cvm.v20170312.Client

// ...

实例化Client 的入参支持 clientConfig 数据结构和说明 详见 ClientConfig

Common Client

从 4.0.714 版本开始腾讯云 NODEJS SDK 支持使用泛用性的 API 调用方式(Common Client)进行请求。您只需要安装 tencentcloud-sdk-nodejs-common 包,即可向任何产品发起调用。

注意,您必须明确知道您调用的接口所需参数,否则可能会调用失败。

详细使用请参阅示例:使用 Common Client 进行调用

更多示例

更丰富的使用 demo 请在 examples 目录中寻找。

相关配置

代理

如果是有代理的环境下,需要配置代理,请在创建Client时传入 profile.httpProfile.proxy 参数,或设置系统环境变量 http_proxy ,否则可能无法正常调用,抛出连接超时的异常。

凭证管理

除显式传入凭证外,从 v4.0.506 起支持 腾讯云实例角色

在您为实例绑定角色后,您可以在实例中访问相关元数据接口获取临时凭证。用法可参考 js示例代码ts示例代码

// ...
const CvmRoleCredential = require("tencentcloud-sdk-nodejs/tencentcloud/common/cvm_role_credential").default

new XxxClient({
  // ...
  credential: new CvmRoleCredential(),
  // ...
})

旧版 SDK

我们推荐使用新版 NODEJS SDK,如果一定要用旧版 SDK,请前往github 仓库下载。

常见问题

  • webpack打包出错/浏览器报错

    务必不要将此sdk直接用于web前端(包括小程序等),暴露密钥在这些环境非常不安全。

    正确的做法是在自己的服务端引用此sdk,并保存好密钥,做好请求鉴权;前端再调用服务端执行业务流程。

  • The "original" argument must be of type Function.

    通常是因为nodejs版本低于 v10 ,或处于非node环境,请再次确认执行环境。

  • 请求不通

    设置环境变量 NODE_DEBUG=http 来开启请求日志输出来定位问题,例如:

    # MacOS
    NODE_DEBUG=http node app.js
    # windows cmd
    set NODE_DEBUG=http & node app.js
    # windows powershell
    $env:NODE_DEBUG='http' ; node app.js

    如需要配置代理,请查阅 代理,或设置环境变量 http_proxy,例如:

    # MacOS
    http_proxy=http://代理地址:代理端口 node app.js
  • 整数类型值超出 JavaScript 最大安全整数 使用新的数据类型 BigInt

tencentcloud-sdk-nodejs's People

Contributors

alsotang avatar axolo avatar cyrilluce avatar dependabot[bot] avatar fxh123 avatar hitxingkong avatar jevinhuang avatar kimii avatar louishlz avatar sesky4 avatar starkwang avatar tczzz avatar techird avatar tencent-carryfan avatar tencentcloudapi avatar vkyin avatar wangmuxian avatar zhutoutoutousan avatar zqfan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tencentcloud-sdk-nodejs's Issues

这个地方导致我 使用 captcha.v20190722.Client 报错

我必须将profile作为一个必填项,否则将提示错误

language: profile.language,

"tencentcloud-sdk-nodejs": "^4.0.90",

const Client = captcha.v20190722.Client;
 this.captcha = new Client({
      credential: {
        secretId: this.configService.captcha.appID,
        secretKey: this.configService.captcha.appSecret
      },
      region: "",
      profile: {}
    });

Cannot read property 'language' of undefined +14ms
TypeError: Cannot read property 'language' of undefined
at new AbstractClient (/xxxx/node_modules/tencentcloud-sdk-nodejs/tencentcloud/common/abstract_client.js:50:31)

ps: 其实我觉得这一块有太多的 && 做判断了,这将在开发过程都可能会存在一些问题

调用clb的ModifyTargetWeight会返回错误

调用参数都看过是正确的,
`const filters = {
LoadBalancerId: 'xxx',
ListenerId: 'xxx',
LocationId: 'xxx',

  Weight,
  Targets: [
    {
      InstanceId: 'xxx',
    },
  ],
};

`
但返回下面内容:
{ Error: An internal error has occurred. Retry your request, but if the problem persists, contact us with details by posting a message on the Tencent cloud forums.
at HttpConnection.doRequest (/data/polaris/node_modules/tencentcloud-sdk-nodejs/tencentcloud/common/abstract_client.js:98:45)
at Request._callback (/data/polaris/node_modules/tencentcloud-sdk-nodejs/tencentcloud/common/http/http_connection.js:28:13)
at Request.self.callback (/data/polaris/node_modules/request/request.js:185:22)
at Request.emit (events.js:182:13)
at Request. (/data/polaris/node_modules/request/request.js:1161:10)
at Request.emit (events.js:182:13)
at IncomingMessage. (/data/polaris/node_modules/request/request.js:1083:12)
at Object.onceWrapper (events.js:273:13)
at IncomingMessage.emit (events.js:187:15)
at endReadableNT (_stream_readable.js:1092:12)
requestId: 'b3bac0b7-ab7d-4a60-a1d7-273de44abd27',
code: 'InternalError' }

iotcloud client `GetUserResourceInfo` params **type error**

我使用typescript编码,当使用IotcloudClientGetUserResourceInfo方法时,发现参数类型定义错了,包中定义的是null类型,实际不能传null类型。如果参数传null,则会报如下错误:

** The request content not valid json format for specified content-type=application/json.**

通过控制台的api explorer去调用是可以正常调用的,但是其传递的参数为Object类型,最终我采用如下写法才正常可用

  /**
   * 获取账号资源信息
   * @returns 账号资源信息
   */
  async info(): Promise<GetUserResourceInfoResponse> {
    return this.iotClient.GetUserResourceInfo({} as null);
  }

我看来你们包中的源码,看到相关参数定义如下:

/**
 * GetUserResourceInfo请求参数结构体
 */
export declare type GetUserResourceInfoRequest = null;

建议修改一下类型

请问如何支持 promise?

看到 AbsoluteClient内置 HttpConnection本身是 Promise,但返回结果居然又包裹成 callback 了,
感觉比较无语

HMAC-SHA256 签名方式有问题 ?

SCF 传函数的时候需要传 zip 文件,根据文档里的描述这里可以采用传 Base64 的方式进行传输。

然而,base64 很长,最后得到的响应是签名无效。。。。

image

而代码里默认走的是 hmac256:

image

看起来是 Hmac 256 的实现有问题,能定位看看问题不?

和问题69 一样 在腾讯云serverless上,发送短信,报错没传SecretId

环境:
"tencentcloud-sdk-nodejs": "3.0.266"

报错:

error TencentCloudSDKHttpException [Error]: The request is missing a required parameter `SecretId`.
    at SmsClient.parseResponse (/Users/cpu/gitClone/ylz/robot-management/node_modules/tencentcloud-sdk-nodejs/tencentcloud/common/abstract_client.js:138:33)
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
    at async SmsClient.doRequest (/Users/cpu/gitClone/ylz/robot-management/node_modules/tencentcloud-sdk-nodejs/tencentcloud/common/abstract_client.js:100:16) {
  requestId: '01d08f06-3ec7-4cbc-878d-ede0cedaf2a3',
  code: 'MissingParameter'
}

GetMonitorData Failing

Hi, I'm using this SDK to get monitor data of CVM instances and I've been unable to form a working query. So far I'm getting an error when following instructions here.

I opened the source code of the Models for monitor and then formed an Instances array with a Dimensions array inside. No luck either. I get a Error: Param dimensions error

This is where I am now:

        const tencent = require('tencentcloud-sdk-nodejs');
        const MonitorApi = tencent.monitor.v20180724;
        const MonitorApiClient = MonitorApi.Client;
        const MonitorApiModels = MonitorApi.Models;
        const Credential = tencent.common.Credential;
        const cred = new Credential(credentials.key, credentials.secret);

        const monitorRequest = new MonitorApiModels.GetMonitorDataRequest();
        const monitorClient = new MonitorApiClient(cred, regionId);

        console.log('Tencent Cloud CVM initialised');

        monitorRequest.Period = Period;
        monitorRequest.StartTime = StartTime;
        monitorRequest.EndTime = EndTime;
        monitorRequest.Instances = [
          {
            Dimensions: [
              {
                Name: 'unInstanceId',
                Value: instanceId,
              },
            ],
          },
        ];

        monitorClient.GetMonitorData(monitorRequest, callback);

I'd love to get an example of how to query it.

region 和 profile 参数的可选必选实现不准确

创建 Client 时,

  1. region 参数对于一些产品来说是可选的,比如 sms,现在要传入空字符串,并不优雅;
  2. profile 参数在类型上标记为可选,但是如果不传入会报错,因为构造函数里面直接读取了这个参数的属性

hi,tencenter 在腾讯示例中underfind tencentcloud.common.Credential

tencentcloud-sdk-nodejs 依赖版本:^4.0.3,
腾讯云示例node code url:https://console.cloud.tencent.com/api/explorer?Product=ft&Version=2020-03-04&Action=SwapGenderPic&SignVersion=
示例code如下:
`const tencentcloud = require("tencentcloud-sdk-nodejs");

const FtClient = tencentcloud.ft.v20200304.Client;
const models = tencentcloud.ft.v20200304.Models;

const Credential = tencentcloud.common.Credential;
const ClientProfile = tencentcloud.common.ClientProfile;
const HttpProfile = tencentcloud.common.HttpProfile;

let cred = new Credential("", "");
let httpProfile = new HttpProfile();
httpProfile.endpoint = "ft.tencentcloudapi.com";
let clientProfile = new ClientProfile();
clientProfile.httpProfile = httpProfile;
let client = new FtClient(cred, "ap-guangzhou", clientProfile);

let req = new models.SwapGenderPicRequest();

let params = {
"GenderInfos": [
{
"Gender": 1
}
]
};
req.from_json_string(JSON.stringify(params));

client.SwapGenderPic(req, function(errMsg, response) {
if (errMsg) {
console.log(errMsg);
return;
}
console.log(response.to_json_string());
});异常如下:const Credential = tencentcloud.common.Credential; TypeError: Cannot read property 'Credential' of undefined; 查询源码中并无 common 请问是npm冲突还是? 源码导入模块如下:export { aa } from "./aa";
export { aai } from "./aai";
export { af } from "./af";
export { afc } from "./afc";
export { ame } from "./ame";
export { ams } from "./ams";
export { apigateway } from "./apigateway";
export { as } from "./as";
export { asr } from "./asr";
export { batch } from "./batch";
export { bda } from "./bda";
export { billing } from "./billing";
export { bizlive } from "./bizlive";
export { bm } from "./bm";
export { bmeip } from "./bmeip";
export { bmlb } from "./bmlb";
export { bmvpc } from "./bmvpc";
export { bri } from "./bri";
export { cam } from "./cam";
export { captcha } from "./captcha";
export { cat } from "./cat";
export { cbs } from "./cbs";
export { ccc } from "./ccc";
export { cdb } from "./cdb";
export { cdn } from "./cdn";
export { cds } from "./cds";
export { cfs } from "./cfs";
export { cfw } from "./cfw";
export { chdfs } from "./chdfs";
export { cim } from "./cim";
export { cis } from "./cis";
export { ckafka } from "./ckafka";
export { clb } from "./clb";
export { cloudaudit } from "./cloudaudit";
export { cloudhsm } from "./cloudhsm";
export { cme } from "./cme";
export { cmq } from "./cmq";
export { cms } from "./cms";
export { cpdp } from "./cpdp";
export { cr } from "./cr";
export { cvm } from "./cvm";
export { cwp } from "./cwp";
export { cws } from "./cws";
export { cynosdb } from "./cynosdb";
export { dayu } from "./dayu";
export { dbbrain } from "./dbbrain";
export { dc } from "./dc";
export { dcdb } from "./dcdb";
export { domain } from "./domain";
export { drm } from "./drm";
export { ds } from "./ds";
export { dts } from "./dts";
export { ecc } from "./ecc";
export { ecdn } from "./ecdn";
export { ecm } from "./ecm";
export { emr } from "./emr";
export { es } from "./es";
export { facefusion } from "./facefusion";
export { faceid } from "./faceid";
export { fmu } from "./fmu";
export { ft } from "./ft";
export { gaap } from "./gaap";
export { gme } from "./gme";
export { gs } from "./gs";
export { gse } from "./gse";
export { habo } from "./habo";
export { hcm } from "./hcm";
export { iai } from "./iai";
export { ic } from "./ic";
export { ie } from "./ie";
export { iir } from "./iir";
export { iot } from "./iot";
export { iotcloud } from "./iotcloud";
export { iotexplorer } from "./iotexplorer";
export { iottid } from "./iottid";
export { iotvideo } from "./iotvideo";
export { kms } from "./kms";
export { lighthouse } from "./lighthouse";
export { live } from "./live";
export { lp } from "./lp";
export { mariadb } from "./mariadb";
export { memcached } from "./memcached";
export { mgobe } from "./mgobe";
export { mongodb } from "./mongodb";
export { monitor } from "./monitor";
export { mps } from "./mps";
export { ms } from "./ms";
export { msp } from "./msp";
export { mvj } from "./mvj";
export { nlp } from "./nlp";
export { npp } from "./npp";
export { ocr } from "./ocr";
export { organization } from "./organization";
export { partners } from "./partners";
export { postgres } from "./postgres";
export { redis } from "./redis";
export { rkp } from "./rkp";
export { rp } from "./rp";
export { scf } from "./scf";
export { smpn } from "./smpn";
export { sms } from "./sms";
export { soe } from "./soe";
export { solar } from "./solar";
export { sqlserver } from "./sqlserver";
export { ssl } from "./ssl";
export { ssm } from "./ssm";
export { sts } from "./sts";
export { taf } from "./taf";
export { tag } from "./tag";
export { tav } from "./tav";
export { tbaas } from "./tbaas";
export { tbm } from "./tbm";
export { tbp } from "./tbp";
export { tcaplusdb } from "./tcaplusdb";
export { tcb } from "./tcb";
export { tcex } from "./tcex";
export { tci } from "./tci";
export { tcr } from "./tcr";
export { tdmq } from "./tdmq";
export { tia } from "./tia";
export { ticm } from "./ticm";
export { tics } from "./tics";
export { tiems } from "./tiems";
export { tiia } from "./tiia";
export { tione } from "./tione";
export { tiw } from "./tiw";
export { tke } from "./tke";
export { tkgdq } from "./tkgdq";
export { tms } from "./tms";
export { tmt } from "./tmt";
export { trtc } from "./trtc";
export { tsf } from "./tsf";
export { tts } from "./tts";
export { vod } from "./vod";
export { vpc } from "./vpc";
export { wss } from "./wss";
export { youmall } from "./youmall";
export { yunjing } from "./yunjing";
export { yunsou } from "./yunsou";
`

删除短信模板报错

{ "Response": { "Error": { "Code": "InternalError.JsonParseFail", "Message": "request json body parse fail" }, "RequestId": "927a4b10-592f-4a43-8e1a-afe606148aeb" } }

使用文档中CDN刷新URL接口例子报错

错误信息:
[TencentCloudSDKException]message:The specified api version=‘2018-06-06’ does not exist in service=‘cvm’.

代码如下:

    const clientConfig = {
      credential: {
        secretId: secretId || process.env.SECRET_ID,
        secretKey: secretKey || process.env.SECRET_KEY,
      },
      region: "",
      profile: {
        httpProfile: {
          endpoint: "cvm.tencentcloudapi.com",
        },
      },
    };

    const client = new CdnClient(clientConfig);

    if(!paths && !dirs) {
      throw new Error('--path和--dir为空,两者必须选一')
    } else if (paths && paths.length > 0) {
      const params = {
        "Urls": paths
      };

      client.PurgeUrlsCache(params).then(
        data => {
          logger.info("刷新URL成功")
          logger.info(data)
        },
        err => {
          logger.error("刷新URL失败")
          logger.error(err)
        }
      );
    } else if (dirs && dirs.length > 0) {
      const params = {
        "Paths": dirs,
        "FlushType": "flush"
      };

      client.PurgePathCache(params).then(
        data => {
          logger.info("刷新目录成功")
          logger.info(data)
        },
        err => {
          logger.error("刷新目录失败")
          logger.error(err)
        }
      );
    }

uniapp 导入报错

uniapp npm install tencentcloud-sdk-nodejs --save
项目启动后报错
TypeError: Cannot read property 'FormData' of undefined

升级到 4.0.5 以后,调用不需要传递 Region 参数的云 API 报错

SDK 版本:4.0.5

调用的代码参照 API Explorer

// Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher
const tencentcloud = require("tencentcloud-sdk-nodejs");

const AsrClient = tencentcloud.asr.v20190614.Client;

const clientConfig = {
  credential: {
    secretId: "AKID......",
    secretKey: "......",
  },
  region: "",
  profile: {
    httpProfile: {
      endpoint: "asr.tencentcloudapi.com",
    },
  },
};

const client = new AsrClient(clientConfig);
const params = {
"ProjectId": 0,
    "SubServiceType": 2,
    "EngSerViceType": "16k_en",
    "SourceType": 0,
    "VoiceFormat": "wav",
    "UsrAudioKey": "......",
    "Url": "......"
};
client.SentenceRecognition(params).then(
  (data) => {
    console.log(data);
  },
  (err) => {
    console.error("error", err);
  }
);

报错信息:

error TencentCloudSDKHttpException [Error]: A value specified in `X-TC-Region` is not valid, is unsupported, or cannot be used.
    at Client.parseResponse (E:\test\node_modules\tencentcloud-sdk-nodejs\tencentcloud\common\abstract_client.js:128:33)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async Client.request (E:\test\node_modules\tencentcloud-sdk-nodejs\tencentcloud\common\abstract_client.js:60:28) {
  requestId: '35b21c92-07c4-46c4-8494-220fff19013b',
  code: 'InvalidParameterValue'
}

抓包发现请求的 header 里面,X-TC-Region 的值为 null,对照用 API Explorer 发出的请求,里面没有带这个 header

image

asr.tencentcloudapi.com delete://req.headers.X-TC-Region

排除掉这个 header 以后可以正常调用,看起来是没有对不传递 Region 参数的接口做处理?

image

V3签名中,getDate方法返回的并不是UTC日期。

const date = getDate(timestamp)

这里的date需要是UTC日期。而getDate方法返回的是本地时区的日期:

function getDate(timestamp) {
const date = new Date(timestamp * 1000)
const year = date.getFullYear()
const month = ('0' + (date.getMonth() + 1)).slice(-2)
const day = ('0' + date.getDate()).slice(-2)
return `${year}-${month}-${day}`
}

这里应该修改为:

function getDate(timestamp) {
    const date = new Date(timestamp * 1000)
    const year = date.getUTCFullYear()
    const month = ('0' + (date.getUTCMonth() + 1)).slice(-2)
    const day = ('0' + date.getUTCDate()).slice(-2)
    return `${year}-${month}-${day}`
}

ClientConfig中的可选字段profile.language,如果不填写会报错

使用的sms.v20190711.Client
按照文档,profile和profile.language是可选字段,但是如果不传入的话,会报错
this.profile = {
signMethod: (profile && profile.signMethod) || "TC3-HMAC-SHA256",
httpProfile: Object.assign({
reqMethod: "POST",
endpoint: null,
protocol: "https://",
reqTimeout: 60,
}, profile && profile.httpProfile),
language: profile.language,//这一行报错
};
实际上就是没判断是否传了profile对象,就直接取值了。因此直接给profile一个空对象,事实上代码也能过。

另外,为什么v20210111里面没有可用的对象?

建议支持proxy配置

在需要通过代理访问的网络条件下,无法使用sdk,建议增加http代理配置功能

在腾讯云serverless上,发送短信,报错没传SecretId

环境:Nodejs10.15
编码:Typescript
component:https://github.com/serverless-components/tencent-koa
tencentcloud-sdk-nodejs 和其他依赖打包上传到,再由函数调用发送短信
本地环境不报错,把tencentcloud-sdk-nodejs上传到函数里也不报错,放到层里就报错,其他npm包没有这种问题

async function smsPromise(params: any) {
    const Client = tencentcloud.sms.v20190711.Client;
    const client = new Client({
        credential: {
            /* 必填:腾讯云账户密钥对secretId,secretKey。
             * 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
             * 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
             * 以免泄露密钥对危及你的财产安全。
             * CAM密匙查询: https://console.cloud.tencent.com/cam/capi */
            secretId: config.tencent_sms_secretId,
            secretKey: config.tencent_sms_secretKey
        },
        /* 必填:地域信息,可以直接填写字符串ap-guangzhou,或者引用预设的常量 */
        region: 'ap-guangzhou',
        profile: { language: 'zh-CN' }
    });
    console.log({
        credential: {
            secretId: config.tencent_sms_secretId,
            secretKey: config.tencent_sms_secretKey
        },
        region: 'ap-guangzhou',
        profile: { language: 'zh-CN' }
    });  // 日志显示是正常的,有SecretId
    console.log(params);

    return new Promise((resolve, reject) => {
        client.SendSms(params, function(err, response) {
            // 请求异常返回,打印异常信息
            if (err) {
                reject(err);
                return;
            }
            // 请求正常返回,打印response对象
            resolve(response);
        });
    });
}

建议项目按业务模块拆分发布

当前项目将所有业务模块都发布到同一个 npm 库,用户如果单独只是想使用某个模块,比如 apigateway,却需要全量安装,整个包大小有 23.6M,如下截图:

image

可以通过 lerna 工具来管理,发包均带有命名空间,比如 @tencentcloud/apigateway,这样用户可根据个人需求,来选择安装所需要的业务模块,可以大大精简项目代码体积。

4.0.88版本的npm包dependencies不正确

npm上的版本package.json为

"dependencies": {
    "tencentcloud-sdk-nodejs-common": "^1.1.5"
  },

跟git代码中的dependencies不一致,导致production环境的某些包比如tslib会找不到

The "original" argument must be of type Function

在Ubuntu 系统部署项目,报 The "original" argument must be of type Function 错误,使用的是阿里云服务器。在Windows开发电脑没这个报错。

项目情况:eggjs搭建的项目,依赖如下
"@alicloud/sms-sdk": "^1.0.8",
"ali-oss": "^6.12.0",
"cheerio": "^1.0.0-rc.2",
"egg": "^2.0.0",
"egg-cors": "^2.0.0",
"egg-jwt": "^3.1.7",
"egg-multipart": "^2.10.3",
"egg-mysql": "^3.0.0",
"egg-redis": "^2.0.0",
"egg-scripts": "^2.5.0",
"egg-sequelize": "^5.0.0",
"egg-validate": "^1.0.0",
"egg-view-nunjucks": "^2.1.6",
"excel-export": "^0.5.1",
"js-base64": "^2.4.3",
"jsonwebtoken": "^8.1.1",
"mocha": "^4.1.0",
"moment": "^2.21.0",
"mysql2": "^2.2.5",
"node-excel-export": "^1.4.3",
"tencentcloud-sdk-nodejs": "^4.0.44"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.