Giter Site home page Giter Site logo

weapp-node-server-sdk's Introduction

Wafer 服务端 SDK - Node.js

NPM Version Minimum Node.js Version Build Status Coverage Status License

本项目是 Wafer 组成部分,以 SDK 的形式为业务服务器提供以下服务:

安装

npm install qcloud-weapp-server-sdk --save

API

参见 API 文档

使用

初始化 SDK 配置项

const qcloud = require('qcloud-weapp-server-sdk');

qcloud.config({
    ServerHost: '业务服务器的主机名',
    AuthServerUrl: '鉴权服务器地址',
    TunnelServerUrl: '信道服务器地址',
    TunnelSignatureKey: '和信道服务器通信的签名密钥',
});

使用会话服务

处理用户登录请求

业务服务器提供一个路由(如 /login)处理客户端的登录请求,直接使用 SDK 的 LoginService::login() 方法即可完成登录处理。登录成功后,可以获取用户信息。

const express = require('express');
const LoginService = require('qcloud-weapp-server-sdk').LoginService;
const app = express();

app.get('/login', (req, res) => {
    const loginService = new LoginService(req, res);

    loginService.login().then(result => {
        console.log('微信用户信息', result.userInfo);
    });
});

app.listen(80);

检查请求登录态

客户端交给业务服务器的请求,业务服务器可以通过 SDK 的 LoginService::check() 方法来检查该请求是否包含合法的会话。如果包含,则会返回会话对应的用户信息。

const express = require('express');
const LoginService = require('qcloud-weapp-server-sdk').LoginService;
const app = express();

// 获取用户信息
app.get('/user', (req, res) => {
    const loginService = new LoginService(req, res);

    loginService.check().then(result => {
        res.json({
            'code': 0,
            'message': 'ok',
            'data': {
                'userInfo': result.userInfo,
            },
        });
    });
});

app.listen(80);

阅读 Wafer Wiki 文档中的会话服务了解更多关于会话服务的技术资料。

使用信道服务

业务在一个路由上(如 /tunnel)提供信道服务,只需把该路由上的请求都交给 SDK 的信道服务处理即可。

const express = require('express');
const bodyParser = require('body-parser');
const TunnelService = require('qcloud-weapp-server-sdk').TunnelService;
const app = express();

class TunnelHandler {
    // TODO: 处理 onRequest 事件,
    onRequest(tunnelId, userInfo) {}

    // TODO: 处理 onConnect 事件
    onConnect(tunnelId) {}

    // TODO: 处理 onMessage 事件
    onMessage(tunnelId, type, content) {}

    // TODO: 处理 onClose 事件
    onClose(tunnelId) {}
}

// parse `application/json`
app.use(bodyParser.json());

// 处理信道请求
// 信道需同时处理 `GET` 和 `POST` 请求,为了方便这里使用 `all` 方法
app.all('/tunnel', (req, res) => {
    const tunnelService = new TunnelService(req, res);
    const handler = new TunnelHandler();

    tunnelService.handle(handler, { 'checkLogin': true });
});

app.listen(80);

使用信道服务需要实现处理器,来获取处理信道的各种事件,具体可参考配套 Demo 中的 ChatTunnelHandler 的实现。

阅读 Wafer Wiki 中的信道服务了解更多解决方案中关于信道服务的技术资料。

详细示例

参见项目:Wafer 服务端 DEMO - Node.js

LICENSE

MIT

weapp-node-server-sdk's People

Contributors

miusuncle avatar techird 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

weapp-node-server-sdk's Issues

Tunnel service issue - ws.qcloud response format

I established the environment for the demo on an AWS server. I successfully started the server code. When I ran the client demo, everything is ok except the tunnel test. When I looked at the server log, I found this:

========================================
POST https://ws.qcloud.com/get/wsurl => [200] {
"[请求]": {
"data": "{"receiveUrl":"https://xxxx.com/tunnel\",\"protocolType\":\"wss\"}",
"tcId": "05e2cb9bc9b54b3c9180a50bb08df82d",
"tcKey": "kB8PdRC5rkz------------------HYMt93P",
"signature": "f924c0f97c8061033811ac56a00a67d51a8958f9"
},
"[响应]": {
"code": 0,
"message": "OK",
"data": {
"tunnelId": "ab6f5913-4d2a-4be6-9087-59037edd9bb1",
"connectUrl": "wss://ws.qcloud.com/ws/test?tunnelId=ab6f5913-4d2a-4be6-9087-59037edd9bb1"
}
},
"[耗时]": "1733ms"
}

Then I read the SDK code, I found there are 2 potential inconsistent issues.

  • the response has no signature column, but in tunnel-service.js:89, it is checking signature, which will fail for sure and throw a Error('签名校验失败').
  • the response data has already been JSON.parsed, when call JSON.parse again, we will get an empty object and thus raise an error.

By the way, the connectUrl looks like for test, ../ws/test/?tunnelId=..., I was wondering is that correct? Why it returns a test url?

Thanks!

连接数据库,无法执行增删改操作

ERR_WHEN_INSERT_TO_DB: { Error: MySQL server is requesting the old and insecure pre-4.1 auth mechanism. Upgrade the user password or use the {insecureAuth: true} option.

连接数据库,在执行CRUD操作时,抛错了。需要在连接数据库的地方加上 insecureAuth: true 。

信道tunnel服务器请求问题

今天尝试在自己的服务器上搭建完成了wafer。 使用client-demo 作为测试。
最后调用pm2 log weapp 看到的log如下:

1|weapp    | ========================================
1|weapp    | POST http://192.168.0.13:8080 => [200] {
1|weapp    |   "[请求]": {
··· ··· ···
1|weapp    |   "[响应]": {
··· ··· ···
1|weapp    | ========================================
1|weapp    | GET /user 200 378 - 47.207 ms
1|weapp    | ========================================
1|weapp    | POST http://192.168.0.13:8080 => [200] {
1|weapp    |   "[请求]": {

1|weapp    |   "[响应]": {
1|weapp    |     "returnCode": 0,
1|weapp    |     "returnMessage": "AUTH_SUCCESS",
1|weapp    |     "returnData": {
1|weapp    |       "user_info": {
1|weapp    |         "openId": "oAOYI------NjaE7Kbgl4",
1|weapp    |         "nickName": "xxxxxx",
1|weapp    |         "gender": 1,
1|weapp    |         "language": "en",
1|weapp    |         "city": "",
1|weapp    |         "province": "",
1|weapp    |         "country": "CN",
1|weapp    |         "avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTf------------tGbUyCK2kHCxaiard0FvGn3HzfhmSAaxpsa2iad9BfzcZfo03s7U7JRvIvicEre53g/0",
1|weapp    |         "watermark": {
1|weapp    |           "timestamp": 1483467130,
1|weapp    |           "appid": "wxe--------ec57d"
1|weapp    |         }
1|weapp    |       }
1|weapp    |     },
1|weapp    |     "version": 1,
1|weapp    |     "componentName": "MA"
1|weapp    |   },
1|weapp    |   "[耗时]": "50ms"
1|weapp    | }
1|weapp    | ========================================
1|weapp    | ========================================
1|weapp    | POST https://ws.qcloud.com/get/wsurl => [200] {
1|weapp    |   "[请求]": {
1|weapp    |     "data": "{\"receiveUrl\":\"https://www.h-----ong.com/tunnel\",\"protocolType\":\"wss\"}",
1|weapp    |     "tcId": "cd0472f7afaff4f7ad0371b3feca9f3c",
1|weapp    |     "tcKey": "62aaa14292b3a65a61c14b8c30437bc648e087b2",
1|weapp    |     "signature": "44caf8f71c10773a92d420f86156214cf137915d"
1|weapp    |   },
1|weapp    |   "[响应]": {
1|weapp    |     "code": 0,
1|weapp    |     "message": "OK",
1|weapp    |     "data": "{\"tunnelId\":\"ef1984c0b68c590b09eda622cff015515b77699c\",\"connectUrl\":\"wss://ws.qcloud.com/qcloud?tunnelId=ef1984c0b68c590b09eda622cff015515b77699c&tcId=cd0472f7afaff4f7ad0371b3feca9f3c\"}",
1|weapp    |     "dataEncode": "json",
1|weapp    |     "signature": "0b3d5df98c3de1--------2a57fad713c942bacb"
1|weapp    |   },
1|weapp    |   "[耗时]": "155ms"
1|weapp    | }
1|weapp    | ========================================
1|weapp    | ========================================
1|weapp    | TunnelService [writeJsonResult] => [200] {
1|weapp    |   "url": "wss://ws.qcloud.com/qcloud?tunnelId=ef1984c0b68c590b09eda622cff015515b77699c&tcId=cd0472f7afaff4f7ad0371b3feca9f3c"
1|weapp    | }
1|weapp    | ========================================
1|weapp    | ========================================
1|weapp    | ChatTunnelHandler [onRequest] => {
1|weapp    |   "tunnelId": "ef1984c0b68c590b09eda622cff015515b77699c",
1|weapp    |   "userInfo": {
1|weapp    |     "openId": "oAOYI--------E7Kbgl4",
1|weapp    |     "nickName": "xxxxxx",
1|weapp    |     "gender": 1,
1|weapp    |     "language": "en",
1|weapp    |     "city": "",
1|weapp    |     "province": "",
1|weapp    |     "country": "CN",
1|weapp    |     "avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/Q0j4Tw--------------GbUyCK2kHCxaiard0FvGn3HzfhmSAaxpsa2iad9BfzcZfo03s7U7JRvIvicEre53g/0",
1|weapp    |     "watermark": {
1|weapp    |       "timestamp": 1483467130,
1|weapp    |       "appid": "wxe-----------c57d"
1|weapp    |     }
1|weapp    |   }
1|weapp    | }
1|weapp    | ========================================
1|weapp    | GET /tunnel 200 - - 205.310 ms

日志到这边就卡主了,也没有报错,但是demo运行不起来:

image

请问这个是哪里出了错,是信道服务器的问题吗? 还是我什么地方还没有配置好?

谢谢!!


已解决, 是client-demo 的问题

DeprecationWarning: Unhandled promise rejections are deprecated

在Node v7.10.0环境下报这个Warning,虽然不影响使用,不过看着不是很好看,希望能修复一下:

node_modules/qcloud-weapp-server-sdk/lib/auth/login-service.js:31:29

DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

十万火急,求助下,这个服务器端的tunnel sdk,心跳的ping/pong功能在哪里实现的呢?帮忙指导下,谢谢!

最近一个项目中用到websocket通讯,客户端使用qcloud-weapp-client-sdk ,对应着使用这个服务端
wafer-node-server-sdk,但发觉客户端sdk发送了ping,但服务端好像并没有回复pong。
因此想请教下,这个pong在哪里实现的,谢谢!

qcloud-weapp-client-sdk客户端代码如下:
// 包类型枚举
var PACKET_TYPE_MESSAGE = 'message';
var PACKET_TYPE_PING = 'ping';
var PACKET_TYPE_PONG = 'pong';
var PACKET_TYPE_TIMEOUT = 'timeout';
var PACKET_TYPE_CLOSE = 'close';

/**
 * 发送 Ping 包
 */
function emitPingPacket() {
    emitPacket({ type: PACKET_TYPE_PING });
}

而服务端SDK中好像没有看到对应的响应pong包?

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.