A kis globális segédek: MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY és PROMISIFY
A total5 néhány globális objektumot hoz létre az Ön használatára, és néhány helpert, amely egy sornyi kódot megspórol. Egyik sem igényel beállítást.
- A
MAIN, aREPOés aFUNCüres objektumok, amelyeket a framework egyszer hoz létre: az alkalmazás adatait aMAIN-ben, más adatokat aREPO-ban, a saját függvényeit aFUNC-ban tartsa. ATEMPideiglenes adatok objektuma, amelyet a framework időnként lecserél, ezért ne tartson benne semmit, amire később szüksége lesz. - A
NOWaz aktuális dátumDate-ként. Nagyjából percenként (és egyes hívásokkal) frissül, ezért pontos időhöz használja anew Date()hívást. - Az
EMPTYARRAYés azEMPTYOBJECTbefagyasztott üres értékek, amelyeket új létrehozása helyett visszaadhat: nem módosíthatók. - A
MODSés aPLUGINSa betöltött modulokat és pluginokat tartalmazó objektumok id szerint. AzFés aTotalugyanaz az objektum, a framework, aprintpedig aconsole.log. ANOOPegy függvény, amely nem csinál semmit. - A
REQUIRE(name)arequire, amely az alkalmazásnode_modulesmappájából is feloldja a csomagokat, és elfogad olyan neveket, mint anode:path. - A
CLONE(value)mély másolatot készít: a beágyazott objektumokat, tömböket és dátumokat is másolja. ACOPY(from, to)az első objektum tulajdonságait a másodikba másolja, és a másodikat adja vissza. - A
QUERIFY([url], object)egy objektumból query stringet épít: az üres értékeket és anull-t kihagyja, a tömb vesszővel elválasztott értékké válik. Url-lelurl?...-t ad vissza, anélkül?...-t. - A
PROMISIFY(fn, a, b, c)meghívja afn(a, b, c, callback)függvényt, és egy promise-t ad vissza, amely a callback válaszával teljesül vagy a hibájával elutasításra kerül.
MAIN.started = 'yes';
REPO.counter = 1;
FUNC.double = n => n * 2;
exports.install = function() {
ROUTE('GET /helpers/', helpers);
ROUTE('GET /promisify/', promisify);
};
function helpers($) {
const source = { a: 1, nested: { b: [1, 2] }, date: new Date(2026, 0, 5) };
const cloned = CLONE(source);
const target = { x: 1 };
const returned = COPY({ y: 2 }, target);
$.json({
shared: [MAIN.started, REPO.counter, FUNC.double(4), typeof TEMP],
now: [NOW instanceof Date, Math.abs(Date.now() - NOW.getTime()) < 120000],
emptyarray: [EMPTYARRAY.length, Object.isFrozen(EMPTYARRAY)],
emptyobject: [Object.keys(EMPTYOBJECT).length, Object.isFrozen(EMPTYOBJECT)],
registries: [typeof MODS, typeof PLUGINS],
same: [F === Total, typeof print, NOOP() === undefined],
require: typeof REQUIRE('node:path').join,
clone: [cloned !== source, cloned.nested !== source.nested, cloned.nested.b !== source.nested.b, cloned.date instanceof Date, cloned.nested.b.join()],
copy: [returned === target, target.x, target.y],
querify: QUERIFY('/search/', { q: 'a b', page: 2, empty: '', nothing: null, list: [1, 2] }),
querify2: QUERIFY({ q: 'x' })
});
}
async function promisify($) {
const add = (a, b, callback) => setImmediate(callback, null, a + b);
const fail = (callback) => setImmediate(callback, 'It failed');
const sum = await PROMISIFY(add, 2, 3);
let error = null;
try {
await PROMISIFY(fail);
} catch (e) {
error = e.message || String(e);
}
$.json({ sum: sum, error: error });
}