minvera
Version:
An rpgmaker mv tool for managing plugins and external files
87 lines (74 loc) • 2.25 kB
JavaScript
//=============================================================================
// Http.js
//=============================================================================
class Http {
constructor() {
this._http = require("http");
this._https = require("https");
}
get(info, callback) {
const { URL } = require('url');
let url = new URL(info.url);
let options = {
host: url.host,
path: url.pathname,
};
if(/^https/.test(url))
this.httpsget(options, info, callback);
else if(/^http/.test(url))
this.httpget(options, info, callback);
}
httpget(options, info, callback) {
this._http.get(options, (res) => {
const { statusCode } = res;
const contentType = res.headers['content-type'];
let error;
if(statusCode !== 200) {
error = new Error(`Request Failed.\nStatus Code:${statusCode}`);
}
if(error) {
console.error(error.message);
res.resume();
return;
}
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
try {
callback(info.name, rawData, contentType);
}
catch(e) {
console.error(e.message);
}
});
}).on('error', (e) => { console.error(`Error: ${e.message}`); });
}
httpsget(options, info, callback) {
this._https.get(options, (res) => {
const { statusCode } = res;
const contentType = res.headers['content-type'];
let error;
if(statusCode !== 200) {
error = new Error(`Request Failed.\nStatus Code:${statusCode}`);
}
if(error) {
console.error(error.message);
res.resume();
return;
}
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
try {
callback(info.name, rawData, contentType);
}
catch(e) {
console.error(e.message);
}
});
}).on('error', (e) => { console.error(`Error: ${e.message}`); });
}
}
module.exports = Http;