Giter Club home page Giter Club logo

tcb-js-sdk's Introduction

Tencent Cloud Base(TCB) JavaScript SDK npm (tag)

DEPRECATED 已更名@cloudbase/js-sdk,此仓库只维护现有能力不再增加新能力

介绍

TCB 提供开发应用所需服务和基础设施。TCB JS SDK 让你可以在网页端使用 JavaScript 代码服务访问 TCB 的的服务。你可以使用该 SDK 构建自己的公众号页面或者独立的网站等 Web 服务。

安装

TCB JS SDK 可以通过 tcb-js-sdk 来访问:

npm install --save tcb-js-sdk@latest

要在你的模块式使用模块可以

const tcb = require('tcb-js-sdk');

import * as tcb from 'tcb-js-sdk';

或者使用官方的代码包

<script src="//imgcache.qq.com/qcloud/tcbjs/${version}/tcb.js">

最新版本与npm保持一致,可在tcb-js-sdk中的Versions一栏中查看。

快速上手

初始化

// 引用官方 JS CDN 文件直接使用
const app = tcb.init({
  env: '你的环境 Id'
});
// 模块化开发
const tcb = require('tcb-js-sdk');
const app = tcb.init({
  env: '你的环境 Id'
});

授权

// 获取 auth 对象
const auth = app.auth({
  persistence: 'local'
});

// 微信登录
await auth
  .weixinAuthProvider({
    appid: '微信 appId',
    scope: 'snsapi_base'
  })
  .signIn(function() {});

使用

// 调用云函数
const res = await app.callFunction({
  name: 'test',
  data: {
    str: base64
  }
});

文档

更新日志

查看 更新日志

注意

1.0.1 版本后,为了提高文件上传性能,文件上传方式修改为直接上传到对象存储,为了防止在使用过程中出现 CORS 报错,需要到 Web 控制台 / 用户管理 / 登录设置选项中设置安全域名。如果已有域名出现 CORS 报错,请删除安全域名,重新添加。

开发

安装依赖

npm install

或者

yarn

单元测试

npm test unit

E2E 测试

依赖 puppeteer,在部分 linux 系统下跑不起来

npm run e2e

构建

执行以下命令:

npm run build

会同时构建npm package和通用版全量js文件,如下:

  • dist目录为npm package文件;
  • tcb.js/${version}/tcb.js为通用版js文件。

tcb-js-sdk's People

Contributors

chhpt avatar dongyuanxin avatar lt5c avatar mrjing avatar starkwang avatar yhsunshining avatar zhoujunpeng 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tcb-js-sdk's Issues

local类型的auth,在页面刷新后tcb登录状态无法通过getLoginState找回

问题:
页面刷新前tcb已经匿名登录,页面刷新后,在浏览器的localStorage中还保存着tcb的登录状态数据,但却无法通过auth().getLoginState()得到刷新前的登录状态。通过Ticket登录没有此问题。

官方文档说:
local:在显式退出登录之前的 30 天内保留身份验证状态

现页面刷新一下就没了,是不是BUG?
可以提供一个setLoginState(loginState)的方法来解决这个问题吗?

callFunction 方法的入参,文档里写的和 .d.ts 文件里写的不一致

文档里
image
字段 | 类型 | 必填 | 说明
name | string | 是 | 云函数名称
data | object | 否 | 云函数参数
callback | function | 否 | 回调函数

.d.ts 文件里
image
callFunction(params: {
name: string;
data: any;
query: any;
parse: boolean;
}, callback?: Function): any

这使得我在用ts开发时,data、query、parse都是必传参

判断登陆状态是否过期的方法

在网页开发中
有没有判断登陆是否已经登陆的方法,文档中没找到
登陆成功后url上都会带一个code,手动清除掉code后又会再次调用登陆方法
如有登陆判断的方法就可以在调用登陆方法前判断

nuxt上报window is not defined

nodejs:v10.16.0
npx:v6.9.0
使用SSR模式

部分代码:

<script>
import tcb from "tcb-js-sdk";
export default {
  async asyncData({ req, res }) {
    const app = tcb.init({
      env: "xxx"
    });

    const auth = app.auth();
    const loginState = auth.hasLoginState();
    if (loginState == null) {
      loginState = await auth.anonymousAuthProvider().signIn();
    }

    const res = await app.callFunction({
      name: "xxx"
    });
    const result = res.result;
    console.log(result);

    return { detail: result };
  }
}
</script>

报错:
ERROR window is not defined

at Object.genAdapter (node_modules/tcb-js-sdk/dist/adapters/platforms/web.js:186:15)
at Object.useDefaultAdapter (node_modules/tcb-js-sdk/dist/adapters/index.js:33:22)
at TCB.useDefaultAdapter (node_modules/tcb-js-sdk/dist/index.js:207:29)
at TCB.init (node_modules/tcb-js-sdk/dist/index.js:90:18)
at asyncData (6b7c181dac68c2fc6578.js:1:1308)
at k (server.js:1:887933)
at Promise.all.
.map.n (server.js:1:905680)
at Array.map ()
at t.default (server.js:1:905589)

(node:52436) UnhandledPromiseRejectionWarning: ReferenceError: window is not defined
at Object.genAdapter (/Users/tommy/Desktop/zq-sls/zq-web/node_modules/tcb-js-sdk/dist/adapters/platforms/web.js:186:15)
at Object.useDefaultAdapter (/Users/tommy/Desktop/zq-sls/zq-web/node_modules/tcb-js-sdk/dist/adapters/index.js:33:22)
at TCB.useDefaultAdapter (/Users/tommy/Desktop/zq-sls/zq-web/node_modules/tcb-js-sdk/dist/index.js:207:29)
at TCB.init (/Users/tommy/Desktop/zq-sls/zq-web/node_modules/tcb-js-sdk/dist/index.js:90:18)
at asyncData (6b7c181dac68c2fc6578.js:1:1308)
at k (server.js:1:887933)
at Promise.all.
.map.n (server.js:1:905680)
at Array.map ()
at t.default (server.js:1:905589)

uploadFile不会触发onUploadProgress, 无法追踪上传进度

请检查是否该向/adapters/platforms/web.ts的_request函数内增加如下语句:

if (ajax.upload && options.onUploadProgress) {
            ajax.upload.onprogress = function progress(e) {
              if (e.total > 0) {
                e.percent = e.loaded / e.total * 100;
              }
              options.onUploadProgress(e);
            };
          }

Vue Typescript 工程引用报错

重现步骤

//创建vue工程,勾选ts
vue create test-project 
npm install --save tcb-js-sdk@latest
import TCB from 'tcb-js-sdk'
yarn serve

import tcb就会报错
image

网页刷新后如何维持登录态

web端tcb使用后端传递的ticket登录之后如果在网页刷新之后还能维持登录态?
尝试用localStorage保存,但没有效果

Nativescript: Can't find variable: window

LOG from device iPhoneMM: CONSOLE ERROR file:///app/tns_modules/@angular/core/bundles/core.umd.js:4160:28: ERROR Error: Uncaught (in promise): ReferenceError: Can't find variable: window
genAdapter(file:///app/vendor.js:20104:21)
at useDefaultAdapter(file:///app/vendor.js:19935:32)
at file:///app/vendor.js:21057:46
at file:///app/vendor.js:20968:36
at CloudTcbService(file:///app/bundle.js:309:67)
at CloudTcbService([native code])
at file:///app/tns_modules/@angular/core/bundles/core.umd.js:11331:108

出错的地方:

function genAdapter() {
    var adapter = {
        root: window,
        reqClass: WebRequest,
        wsClass: WebSocket,
        localStorage: localStorage,
        sessionStorage: sessionStorage
    };
    return adapter;
}
exports.genAdapter = genAdapter;

1.7.0版本以及之后,有人遇到CocosCreater2.4微信小游戏真机调试TypeError: Function(...) is not a function么?

在微信开发者工具直接运行是可以的,但真机调试运行就会出现,1.6.1版本没事,之后都会出现,请问有人遇到么?

MiniProgramError
TypeError: Function(...) is not a function
TypeError: Function(...) is not a function
at  (src/assets/cloud/tcbjs/tcbjs.js:1:171219)
at call (src/assets/cloud/tcbjs/tcbjs.js:1:359)
at n (src/assets/cloud/tcbjs/tcbjs.js:1:165011)
at call (src/assets/cloud/tcbjs/tcbjs.js:1:359)
at n (src/assets/cloud/tcbjs/tcbjs.js:1:1158)
at  (src/assets/cloud/tcbjs/tcbjs.js:1:251)
at t (src/assets/cloud/tcbjs/tcbjs.js:1:81)
at  (src/assets/cloud/tcbjs/tcbjs.js:1:2)
at require (WAGameSubContext.js:2:87306)
at at (WAGameSubContext.js:2:86679)

数据库集合的权限使用“自定义权限”时出错

数据库权限使用安全规则自定义权限(等同仅创建者可读写):
{ "read": "doc._openid == auth.openid", "write": "doc._openid == auth.openid" }

tcb-js-sdk在执行数据库查询时的出错信息:
Uncaught (in promise) Error: [DATABASE_PERMISSION_DENIED] Permission denied at IRequest.eval (request.js?46a7:376) at step (request.js?46a7:44) at Object.eval [as next] (request.js?46a7:25) at fulfilled (request.js?46a7:16)

将上面权限配置中的auth.openid改成auth.uid后,还是报相同的错误。
如果在云开发控制台将数据库集合的权限设置改成其它四种基础权限配置时,功能执行正常。

授权登陆返回错误

(一)前置条件:
1、已经设置授权回调域名
2、已经设置web域名白名单

(二)请求(参数已经改为自己的):
tcb.init({
env: 'xxxx-yyy'
});

tcb.auth({
persistence: 'session'
}).weixinAuthProvider({
appid: 'wx73932328juof23',
scope: 'snsapi_base'
}).signIn(function(err, res) {

})

(三)返回:
{"code":"INVALID_REQUEST_SOURCE","message":"Invalid request source"}

如何在react-native中调用

已经传入自定义adapter,也创建并且添加了appSign,还是提示还需要appSecret,这个参数是如何生成的?
import tcb, {TCB} from 'tcb-js-sdk'; import {adapter} from './rnAdapter'; app = tcb.init({ env: 'xxxx', appSign: 'xxxx', appSecret: { appAccessKey: 'xxxx', appAccessKeyId: 'xxxx', }, adapter, }); app.useAdapters({ genAdapter: () => adapter, runtime: 'react-native', isMatch: () => true, });
调用匿名登录api测试下,会返回 [SYS_ERR]非法的应用凭证,请前往控制台用户管理页获取

自定义登录报错 {"code":"SYS_ERR","message":"非法的sign"}

用@cloudbase/adapter-interface 写的adapter,为了避免appSecret,runtime = 'web'.

// adapter.js
function genAdapter() {
  var adapter = {
    root: {},
    reqClass: QappRequest,
    wsClass: QappWebSocket,
    localStorage: QappStorage,
    primaryStorage: StorageType.local,
  };
  return adapter;
}
var adapter = { genAdapter: genAdapter, isMatch: () => true, runtime: 'web' };
exports.default = adapter;
// API 使用
function customLogin() {
  // 获取自定义登录 ticket
  const auth = this.app.auth();
  this.FetchAdapter.get('http://10.220.220.220:8070/node/ticket')
    .then((ticket) => {
      return auth.signInWithTicket(ticket);
    })
    .then((res) => {
      console._ori.log(`the res: ${res}`);
    })
    .catch((e) => {
      console._ori.log(`the error: ${e}`);
    });
}

tcb.useAdapters(adapter);
this.app = tcb.init({
  env: 'xxx',
});
customLogin();

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.