• nodejs typescript怎么发送get、post请求,如何获取网易云通信token


    nodejs typescript怎么发送get、post请求,如何获取网易云通信token

    yarn add jshashes
    yarn add superagent
    检查语法
    yarn lint
    =======================

    user.imToken = await setImToken(user.id);
    
    export async function setImToken(userid: string) {
        const imAppKey: string = config.get('imAppKey');
        const imAppSecret: string = config.get('imAppSecret');
        const imUrl: string = config.get('imUrl');
        const nonce: string = Math.random().toString(36).substr(2, 15);
        const timestamp: number = Date.parse(new Date().toString())/1000;
        const request = require('request');
        const Hashes = require('jshashes');
        // 进行SHA1哈希计算,转化成16进制字符 这里用的库为jshashes
        const sha1Str = imAppSecret + nonce + timestamp;
        const SHA1 = new Hashes.SHA1().hex(sha1Str);
    
        const headers = {
            'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
            'AppKey': imAppKey,
            'Nonce': nonce,
            'CurTime': timestamp,
            'CheckSum': SHA1
        };
        const data = {accid: userid};
        let imtoken: string;
        imtoken = '';
        console.log('pre get:' + imUrl);
        const res: superagent.Response = await remoteUrl(imUrl, {accid: userid}, headers);
    
        if (!res.error) {
            console.log('do update');
            console.log('userid:' + userid);
            const text = JSON.parse(res.text);
            console.log('code:' + text.code);
            if (text.code === 200) {
                const user: UserDocument | null = await UserModel.findById(userid);
                if (user) {
                    // await user.update({imToken: 'test'});
                    console.log('imToken:' + text.info.token);
                    imtoken = text.info.token;
                    await user.update({imToken: text.info.token});
                }
            } else {
                console.log('code:' + text.code);
                console.log('error:' + res.text);
            }
    
        }
        return imtoken;
    }
    
    export async function remoteUrl(url: string, data: object, headers: object) {
        return new Promise<superagent.Response>((resolve, reject) => {
            superagent.post(url)
                .set(headers)
                .send(data)
                .end((err: Error, res: superagent.Response) => {
                    // console.log('end url:' + url);
                    if (!err) {
                        // const info = JSON.parse(res.text);
                        // console.log('code:' + info.code);
                        resolve(res);
                    } else{
                        console.log('err:' + err);
                        reject(err);
                    }
                });
        });
    }
    user.imToken = await setImToken(user.id);
    
    export async function setImToken(userid: string) {
        const imAppKey: string = config.get('imAppKey');
        const imAppSecret: string = config.get('imAppSecret');
        const imUrl: string = config.get('imUrl');
        const nonce: string = Math.random().toString(36).substr(2, 15);
        const timestamp: number = Date.parse(new Date().toString())/1000;
        const request = require('request');
        const Hashes = require('jshashes');
        // 进行SHA1哈希计算,转化成16进制字符 这里用的库为jshashes
        const sha1Str = imAppSecret + nonce + timestamp;
        const SHA1 = new Hashes.SHA1().hex(sha1Str);
    
        const headers = {
            'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
            'AppKey': imAppKey,
            'Nonce': nonce,
            'CurTime': timestamp,
            'CheckSum': SHA1
        };
        const data = {accid: userid};
        let imtoken: string;
        imtoken = '';
        console.log('pre get:' + imUrl);
        const res: superagent.Response = await remoteUrl(imUrl, {accid: userid}, headers);
    
        if (!res.error) {
            console.log('do update');
            console.log('userid:' + userid);
            const text = JSON.parse(res.text);
            console.log('code:' + text.code);
            if (text.code === 200) {
                const user: UserDocument | null = await UserModel.findById(userid);
                if (user) {
                    // await user.update({imToken: 'test'});
                    console.log('imToken:' + text.info.token);
                    imtoken = text.info.token;
                    await user.update({imToken: text.info.token});
                }
            } else {
                console.log('code:' + text.code);
                console.log('error:' + res.text);
            }
    
        }
        return imtoken;
    }
    
    export async function remoteUrl(url: string, data: object, headers: object) {
        return new Promise<superagent.Response>((resolve, reject) => {
            superagent.post(url)
                .set(headers)
                .send(data)
                .end((err: Error, res: superagent.Response) => {
                    // console.log('end url:' + url);
                    if (!err) {
                        // const info = JSON.parse(res.text);
                        // console.log('code:' + info.code);
                        resolve(res);
                    } else{
                        console.log('err:' + err);
                        reject(err);
                    }
                });
        });
    }

    =======================

    import { expect } from 'chai';
    import { setImToken } from '../../app/controllers/userController';
    import { connectMongoDatabase } from '../../app/db/mongo';
    import config from 'config';
    const mongoUri: string = config.get('mongoUri');
    
    describe('getImtoken test', () => {
        it('Should getImtoken', async () => {
            // setTimeout(done, 15000);
            connectMongoDatabase(mongoUri);
            const rs: string = await setImToken('5b29fcca37d16537806b1bf4');
            console.log('rs=' + rs);
            expect(rs).equal('');
        }).timeout(8000);
    });

    =======================

    简化版的

    export async function getIMToken(accid: string) {
        const { AppKey, AppSecret, AppUrl } = config.get('imCfg');
        const Endpoint = '/user/create.action';
        const Nonce: string = Math.random().toString(36).substr(2, 15);
        const CurTime: number = Math.floor(Date.now() / 1000);
        const CheckSum: string = crypto.createHash('sha1').update(AppSecret + Nonce + CurTime).digest('hex');
    
        const headers = { AppKey, Nonce, CurTime, CheckSum };
        const resp = await rp.post(AppUrl + Endpoint, { form: { accid }, headers, json: true });
        try {
            if (resp.code === 200 && resp.info) {
                return resp.info.token;
            } else {
                console.warn(resp);
                return null;
            }
        } catch (e) {
            console.warn(e);
            return null;
        }
    }
    ---------------------
    import { getIMToken } from '../../app/controllers/userController';
    
    describe('getIMToken test', () => {
        it('Should get IMToken', async () => {
            const accid = '5b2a2ba4f032150023ceec46';
            const token = await getIMToken(accid);
            console.log(accid, token);
        });
    });

    测试版的:

    export async function getImToken(userid: string) {
        const imAppKey: string = config.get('imAppKey');
        const imAppSecret: string = config.get('imAppSecret');
        const imUrl: string = config.get('imUrl');
        const nonce: string = Math.random().toString(36).substr(2, 15);
        const timestamp: number = Date.parse(new Date().toString())/1000;
        const request = require('request');
        const Hashes = require('jshashes');
        // 进行SHA1哈希计算,转化成16进制字符 这里用的库为jshashes
        const sha1Str = imAppSecret + nonce + timestamp;
        const SHA1 = new Hashes.SHA1().hex(sha1Str);
    
        const options = {
            // url: imUrl,
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
                'AppKey': imAppKey,
                'Nonce': nonce,
                'CurTime': timestamp,
                'CheckSum': SHA1
            },
            form: {
                accid: userid
            }
        };
        const headers = {
            'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
            'AppKey': imAppKey,
            'Nonce': nonce,
            'CurTime': timestamp,
            'CheckSum': SHA1
        };
        const data = {accid: userid};
        let imtoken: string;
        imtoken = '';
        console.log('pre get:' + imUrl);
        // const res: superagent.Response = await remoteUrl(imUrl, {accid: userid}, headers);
        const response: superagent.Response = await new Promise<superagent.Response>((resolve, reject) => {
            superagent.post(imUrl)
                .set(headers)
                .send(data)
                .end((err: Error, res: superagent.Response) => {
                    console.log('end url:' + imUrl);
                    if (err) {
                        console.log('err:' + err);
                        imtoken = 'error noimtoken';
                        reject(err);
                    } else {
                        const info = JSON.parse(res.text);
                        if (info.code === 200) {
                            imtoken = info.info.token;
                        } else {
                            imtoken = info.desc;
                        }
                        console.log('code:' + info.code);
                        console.log('res:' + res.text);
                        resolve(res);
                    }
                });
        });
        console.log('back res:' + response.text);
        /*
        const promise = new Promise<string>((resolve, reject) => {
            console.log('promise:' + imUrl);
            request(imUrl, options,  (err: any, response: any, body: any ) => {
                console.log('got:' + imUrl);
                if (!err) {
                    body = body.toString();
                    console.log('bytes:' + body.length)
                    imtoken = body;
                    resolve(body);
                } else {
                    console.log(err);
                    imtoken = 'noimtoken';
                    reject(err);
                }
            });
        });
        */
        /*
        const _res: any = await new Promise((resolve, reject) => {
            request(options, (parameters: { error: any, response: any, body: any }) => {
                const {error: error, response, body} = parameters;
                if (!error && response.statusCode === 200) {
                    const info = JSON.parse(body);
                    console.log(info);
                    imtoken = info.info.token;
                    // resolve(info);
                } else {
                    // reject(error);
                    imtoken = 'noimtoken';
                    console.log(error);
                }
            });
        });
    */
        return imtoken;
    }
    
    export async function remoteUrl(url: string, data: object, headers: object) {
        return new Promise<superagent.Response>((resolve, reject) => {
            superagent.post(url)
                .set(headers)
                .send(data)
                .end((err: Error, res: superagent.Response) => {
                    console.log('end url:' + url);
                    if (!err) {
                        const info = JSON.parse(res.text);
                        console.log('code:' + info.code);
                        console.log('res:' + res.text);
                        resolve(res);
                    } else{
                        console.log('err:' + err);
                        reject(err);
                    }
                });
        });
    }
  • 相关阅读:
    藏!Java编程技巧之单元测试用例编写流程 原创 常意 阿里技术 2021-05-12
    时间,遵循rfc3339标准格式 unix时间戳
    微软面试题: LeetCode 240. 搜索二维矩阵 II 出现次数:3
    微软面试题: LeetCode 69. x 的平方根 出现次数:3
    微软面试题: LeetCode 138. 复制带随机指针的链表 出现次数:3
    微软面试题: LeetCode 384. 打乱数组 出现次数:3
    微软面试题: LeetCode 207. 课程表 出现次数:3
    微软面试题: LeetCode 98. 验证二叉搜索树 出现次数:3
    CF1537E2 Erase and Extend (Hard Version) 题解
    洛谷 P4332 [SHOI2014]三叉神经树 题解
  • 原文地址:https://www.cnblogs.com/zdz8207/p/nodejs-typescript-post.html
Copyright © 2020-2023  润新知