Skip to main content

Node.js | Handy Snippets

Delayed Event Trigger

var timeoutId; // set to global or to any enclosing parent scope
// @params delay (milli seconds), customEvent (any function)
function delayedTrigger(delay, customEvent) {
if(timeoutId) {
clearTimeout(timeoutId);
}
timeoutId = setTimeout(()=> {
customEvent()
}, delay);
}

// -- Test --
// The event is triggered only once even if called multiple times in succession.
// This is a critical performance optimization to avoid triggering multiple
// calls to the underlying event.
for(var i = 0;i<3;i++) {
delayedTrigger(2000, ()=>{
console.log('Event Triggered')
});
}

Create Dir If Not Exists

function createDirIfNotExists(newPath) {
if (!fs.existsSync(newPath)) {
fs.mkdirSync(newPath, { recursive: true });
}
}

Gen asymmetric cryptography - Key Pair

JSON Web Token (JWT) — The right way of implementing, with Node.js

// ref: https://thomasstep.com/blog/a-guide-to-using-jwt-in-javascript
import { generateKeyPair } from 'jose';
import fs from 'fs'

async function genKeyPair() {
try {
const { publicKey, privateKey } = await generateKeyPair('RS256');
// https://nodejs.org/api/crypto.html#crypto_class_keyobject
const publicKeyString = publicKey.export({
type: 'pkcs1',
format: 'pem',
});
const privateKeyString = privateKey.export({
type: 'pkcs1',
format: 'pem',
});
return [publicKeyString, privateKeyString];
} catch (e) {
const err = new Error(e.code || 'keygen error', { cause: e }); err.name = 'KeyGenError';
throw err
}
}

function createDirIfNotExists(newPath) {
if (!fs.existsSync(newPath)) {
fs.mkdirSync(newPath, { recursive: true });
}
}

genKeyPair().then((result) => {
console.log(result)
createDirIfNotExists('../keys')
fs.writeFileSync('../keys/public_key.pem', result[0])
fs.writeFileSync('../keys/private_key.pem', result[1])
}).catch(err => console.log(err))

Only dependency is jose package.json ->

{
"name": "keygen",
"version": "1.0.0",
"description": "Assymetric Keygen Util",
"main": "app.js",
"type": "module",
"scripts": {
"start": "node app.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"jose": "^4.11.2"
}
}