TypeScript中的Http请求

我试图将nodejs中的以下代码片段转换为打字稿:如何在Nodejs中进行Http请求

这是我的TypeScript代码:

import * as http from 'http';

export class HttpRequest{

url: string;

private path: string;

private host: string;

private args: Array<Array<string>>;

constructor(url: string, args?: string){

this.url = url;

this.processUrl(this.url);

if(!!args){

this.processArgs(args);

}

this.args = [];

}

private processUrl(url: string): void {

let tld: number = url.lastIndexOf('.')

let sep: number = url.indexOf('/', tld);

this.host = url.slice(0, sep);

this.path = url.slice(sep+1);

}

private processArgs(args: string): void {

let sep: number = args.indexOf('&');

if(sep < 0){

return ;

}

let argpair: string = args.slice(0, sep);

let apsep: number = argpair.indexOf('=');

let k: string = argpair.slice(0, apsep);

let v: string = argpair.slice(apsep+1);

this.args.push([k,v]);

this.processArgs(args.slice(sep+1));

}

private preparePath(): string {

let path: string = `?`;

this.args.forEach((arg: Array<string>, i: number): void => {

let k: string = arg[0];

let v: string = arg[1];

path += k + '=' + v;

if(i == this.args.length-1){

return ;

}

path += '&';

});

return path;

}

public addArg(key: string, value: string): void {

try{

this.args.push([key,value]);

} catch(err) {

console.log(err);

}

}

public addArgs(args: Array<Array<string>>): void {

args.forEach((arg: Array<string>): void => {

this.args.push(arg);

});

}

public get(cb: (res: any) => any): void {

let opts = {

'host': this.host,

'path': `/${this.path}/${this.preparePath()}`

};

http.request(opts, (r: http.IncomingMessage): void => {

let data = '';

r.on('data', (chunk: string): void => {

console.log('Got chunk: ' + chunk);

data += chunk;

});

r.on('end', (): void =>{

console.log('Response has ended');

console.log(data);

cb(data);

});

r.on('error', (err): void => {

console.log('Following error occured during request:\n');

console.log(err);

})

}).end();

}

public test(): void {

console.log(this.preparePath());

console.log(`/${this.path}/${this.preparePath()}`);

}

}

这是我的测试代码:

// Test httpRequest

import { HttpRequest } from './httpRequest';

const request = new HttpRequest('www.random.org/integers');

request.addArg('num', '1');

request.addArg('min', '1');

request.addArg('max', '50');

request.addArg('col', '1');

request.addArg('base', '10');

request.addArg('format', 'plain');

request.addArg('rnd', 'new');

request.test();

request.get((res: string): void => {

console.log('Response received: ' + res);

});

如果此方法正常运行(我在Firefox上检查了链接,则返回纯文本随机数),我应该获得一个数字作为纯文本。但是,当我console.log()回应时,我什么也没得到。我在这里做错了什么?

回答:

尽管request-promise-

native可能工作得很好,但Axios是在TypeScript中使用的更好的替代方法。它带有自己的类型定义,总体上对其他程序包的依赖性较小。使用它的API很像Adrian提供的答案,但是有一些细微的差异。

const url: string = 'your-url.example';

try {

const response = await axios.get(yourUrl);

} catch (exception) {

process.stderr.write(`ERROR received from ${url}: ${exception}\n`);

}

显然,如果您希望客户端处理异常,则可以省去try / catch语句。

以上是 TypeScript中的Http请求 的全部内容, 来源链接: utcz.com/qa/435209.html

回到顶部