64 lines
1.4 KiB
JavaScript
64 lines
1.4 KiB
JavaScript
const { net } = require('electron');
|
|
|
|
async function get(url, headers) {
|
|
return request({ url, method: 'GET', headers })
|
|
}
|
|
|
|
async function post(url, body, headers) {
|
|
return request({ url, method: 'POST', headers }, body)
|
|
}
|
|
|
|
async function request(options, body) {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
const responseBody = [];
|
|
let responseHeaders;
|
|
let responseStatus;
|
|
|
|
const request = net.request(options);
|
|
|
|
request.on('response', (response) => {
|
|
responseStatus = response.statusCode;
|
|
responseHeaders = response.headers;
|
|
|
|
response.on('data', (chunk) => {
|
|
if (chunk) {
|
|
responseBody.push(`${chunk}`);
|
|
}
|
|
});
|
|
response.on('end', () => {
|
|
resolve({
|
|
status: responseStatus,
|
|
headers: responseHeaders,
|
|
body: parseReponseBody(responseBody),
|
|
});
|
|
});
|
|
|
|
response.on('aborted', () => console.log('request aborted'));
|
|
response.on('error', (error) => reject(error));
|
|
});
|
|
|
|
request.on('error', (error) => reject(error));
|
|
|
|
request.setHeader('Content-Type', 'application/json');
|
|
if (['POST'].includes(options.method.toUpperCase())) {
|
|
request.write(JSON.stringify(body), 'utf-8')
|
|
}
|
|
request.end();
|
|
|
|
});
|
|
}
|
|
|
|
function parseReponseBody(body) {
|
|
if (Array.isArray(body)) {
|
|
if (body.length) {
|
|
return JSON.parse(body.join(''));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
get,
|
|
post
|
|
}; |