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); } }); }); }