在一个Electron应用程序中,我成功地从Angular组件发出了HTTPGET请求.我如何从电子方面做同样的事情



以下函数在我的Electron应用程序中的Angular组件中工作:

getData() {

const url = 'https://reqres.in/api/users?page=1';
this.http.get<any>(url).toPromise()
.then(response=> {
//...
alert(JSON.stringify(response));
});
}

警报打印出的文本与您浏览到时看到的文本相同https://reqres.in/api/users?page=1

即:

{"page":1,"per_page":6,"total":12,"total_pages":2,"data":[{"id":1,"email":"george.bluth@reqres.in","first_name":"George","last_name":"Bluth","avatar":"https://reqres.in/img/faces/1-image.jpg"},{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},{"id":3,"email":"emma.wong@reqres.in","first_name":"Emma","last_name":"Wong","avatar":"https://reqres.in/img/faces/3-image.jpg"},{"id":4,"email":"eve.holt@reqres.in","first_name":"Eve","last_name":"Holt","avatar":"https://reqres.in/img/faces/4-image.jpg"},{"id":5,"email":"charles.morris@reqres.in","first_name":"Charles","last_name":"Morris","avatar":"https://reqres.in/img/faces/5-image.jpg"},{"id":6,"email":"tracey.ramos@reqres.in","first_name":"Tracey","last_name":"Ramos","avatar":"https://reqres.in/img/faces/6-image.jpg"}],"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}}

现在,我已经尝试了几种方法来从Electron主应用程序端实现这一点。

这是我当前的化身(它在我的main.ts的app.on函数中(:

const { net } = require('electron')
const request = net.request({
method: 'GET',
url: 'https://reqres.in/api/users?page=1'})
request.on('response', (response) => {
console.log(`STATUS: ${response.statusCode}`)
console.log(`HEADERS: ${JSON.stringify(response.headers)}`)
response.on('data', (chunk) => {
console.log(`BODY: ${chunk}`)
})
response.on('end', () => {
console.log('No more data in response.')
})
})
request.end()

它运行时没有错误,我的response.statusCode=200。

但是在响应中的哪里可以找到从https://reqres.in/api/users?page=1?

我想它可能在"chunk"变量中,如果我把它字符串化,我就有了:

"{"类型":"缓冲区","数据":[12,34112,97103101,34,58,49,44,3411111114,95112,97103101,34,58,54,44,34116111116,97108,34,58,59,54,34116111116,97108,95112,97103101115,34,58:50,44,34100,97116,97,34,58,91123,34105100,34,58:49,44,4101109,97105108,34,34103101111114103,46,98108117116104,64114101113114101115,46105110,34,34102105114115116,95110,97109101,34,58,34,71,101111114103101,34,44,34108,97115116,95110,97109101,34,58,34,66,1…117112111114116,34,58123,34117114108,34,58,34104116116112115,58,47,47114101113114101115,46105110,47,3515117112111114116,45104101,9710010110103,34,44,34116101120116,34,58.34,84111,32107101101112,32,82101113,82101115,32102114101101,44,32,99111110116114105,98,117116105111110115,32116111119,971410115,32115101114118101114,32,99111115116115,32,97114101,32,97112112114101,99105,97116101100,33,34125125]}

这是二进制形式的吗?如果是,我将如何转换?

或者我应该考虑一种与使用net.request完全不同的方法?

或者,我可以像在Angular组件中那样,从电子应用程序main.ts使用HttpClient吗?

我问是因为在Angular组件中,我通过构造函数这样介绍它:

constructor(
private http:HttpClient,) {
super();

但Electron应用程序的主.ts中没有构造函数。

非常感谢您的帮助。

在您的代码中

response.on('data', (chunk) => {
console.log(`BODY: ${chunk}`)
})

CCD_ 1是响应主体数据的一部分的缓冲器。为了获得JSON形式的完整响应体,您需要连接所有缓冲区,然后将其解析为JSON。即

let buffers = [];
response.on('data', (chunk) => {
console.log(`Buffer: ${chunk}`);
buffers.push(chunk);
})
response.on('end', () => {
let responseBodyBuffer = Buffer.concat(buffers);
let responseBodyJSON = JSON.parse(responseBodyBuffer.toString());
console.log(`BODY: ${responseBodyJSON}`);
})

最新更新