Извиквайте други сървъри с REQUEST и запазвайте файлове с DOWNLOAD
REQUEST(options) е HTTP клиентът на ниско ниво, върху който е изграден RESTBuilder. Подайте му обект и използвайте await (или му дайте callback като втори аргумент). Полезните опции са url, method (по подразбиране GET), query (обект, добавен към URL), headers, cookies, body (низ или Buffer), type (json, text, html, xml, urlencoded или raw, който задава content-type), timeout в милисекунди и noredirect.
Резултатът е обект с status, headers, cookies и body (низ; JSON разчетете сами с .parseJSON()). Отговор със статус на грешка като 404 не е грешка: проверете status. Promise се отхвърля само когато самата заявка се провали (отказана връзка, timeout, невалиден хост).
DOWNLOAD(url, filename) записва отговора като поток във файл и се разрешава с { status, size, filename }. Не поглежда статуса, затова го проверете преди да използвате файла.
exports.install = function() {
ROUTE('GET /remote/', remote);
ROUTE('POST /remote/ @json', remote_post);
ROUTE('GET /remote/text/', remote_text);
ROUTE('GET /call/', call);
ROUTE('GET /download/', download);
};
function remote($) {
$.json({ hello: 'world', name: $.query.name || null });
}
function remote_post($) {
$.json({ received: $.body, token: $.headers['x-token'] || null });
}
function remote_text($) {
$.plain('first line\nsecond line\n');
}
async function call($) {
var get = await REQUEST({ url: $.hostname('/remote/'), query: { name: 'Louis' } });
var post = await REQUEST({ method: 'POST', url: $.hostname('/remote/'), type: 'json', body: JSON.stringify({ a: 1 }), headers: { 'x-token': 'abc' } });
var missing = await REQUEST({ url: $.hostname('/does-not-exist/') });
var failed = null;
try {
await REQUEST({ url: 'http://127.0.0.1:1/' });
} catch (e) {
failed = true;
}
$.json({
get: get.body.parseJSON(),
post: post.body.parseJSON(),
status: [get.status, missing.status],
failed: failed
});
}
async function download($) {
var filename = PATH.tmp('forge-download.txt');
var response = await DOWNLOAD($.hostname('/remote/text/'), filename);
var content = require('fs').readFileSync(filename).toString('utf8');
$.json({ status: response.status, size: response.size, content: content });
}