ForgeTotal.js 5
nl

Total.js 5

Andere servers aanroepen met REQUEST en bestanden opslaan met DOWNLOAD

Total.js 5 · total5@0.0.19 httprequestdownload Uitgevoerd met Total.js 5

REQUEST(options) is de HTTP-client op laag niveau waarop RESTBuilder is gebouwd. Geef het een object en gebruik await (of geef het een callback als tweede argument). De nuttige opties zijn url, method (standaard GET), query (een object, aan de URL toegevoegd), headers, cookies, body (een tekenreeks of een Buffer), type (json, text, html, xml, urlencoded of raw, wat content-type instelt), timeout in milliseconden en noredirect.

Het resultaat is een object met status, headers, cookies en body (een tekenreeks; parse JSON zelf met .parseJSON()). Een antwoord met een foutstatus zoals 404 is geen fout: controleer status. De promise wordt alleen afgewezen wanneer het verzoek zelf mislukt (verbinding geweigerd, timeout, ongeldige host).

DOWNLOAD(url, filename) streamt het antwoord naar een bestand en wordt opgelost met { status, size, filename }. Het kijkt niet naar de status, controleer die dus voordat je het bestand gebruikt.

controllers/request.js
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 });
}