When faced with a problem, many of you often look for a library to solve that problem or develop your own. Using the library is like a double-edged sword. It helps to solve the problem quickly but makes the project heavier. Self-development takes a lot of work. In this small blog I list some cases where we don’t need a library, don’t need to code ourselves because nodejs already supports it.
1. Gen UUID v4.
UUID – (universally unique identifier) is interpreted as a unique identification id 128bit long. UUIDs are very commonly used when you need a unique id for the system. UUID v4 is the most commonly used, random uuid type.
1.1 Some support libraries:
- uuid :
1 2 3 | <span class="token keyword">const</span> uuid <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'uuid'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Here is a test v4 uuid: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> uuid <span class="token punctuation">.</span> <span class="token function">v4</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
- nano ID :
1 2 3 4 5 6 7 8 9 10 | <span class="token keyword">const</span> Nanoid <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'nanoid'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> NanoidAsync <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'nanoid/async'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">UUID with Nano ID sync: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> Nanoid <span class="token punctuation">.</span> <span class="token function">nanoid</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">(</span> <span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> nanoId <span class="token operator">=</span> <span class="token keyword">await</span> NanoidAsync <span class="token punctuation">.</span> <span class="token function">nanoid</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">UUID with Nano ID async: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> nanoId <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1.2 Don’t use libraries:
cryto
module added in nodejs v14.17.0. It has provided many methods to support encryption: HMAC, cypher, OpenSSL and also randomUUID
to generate UUID.
1 2 3 | <span class="token keyword">const</span> crypto <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'crypto'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> crypto <span class="token punctuation">.</span> <span class="token function">randomUUID</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
2. Objects deep comparison
Objects deep comparison is a type of sâu
comparison of two objects. Compares two objects that are 100% identical, including nested objects. Need to separate from type:
- Shadow comparison: Shallow comparison: Compare the list of
Object.keys
properties and compare the values of the properties. - Referential comprison: Compares to references of variables. Because objects are reference type variables.
2.1 Using the defense:
1 2 3 4 5 6 7 8 9 | var object = { 'a': 1 }; var other = { 'a': 1 }; _.isEqual(object, other); // => true object === other; // => false |
2.2 Using JSON.stringify:
- Convert the object to json and then compare it like comparing two strings.
1 2 | <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> object1 <span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> object2 <span class="token punctuation">)</span> |
- Isues: Is to fail when comparing similar objects as keys out of order:
1 2 3 4 5 | obj1 <span class="token operator">=</span> <span class="token punctuation">{</span> a <span class="token operator">:</span> <span class="token number">2</span> <span class="token punctuation">,</span> b <span class="token operator">:</span> <span class="token number">4</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> obj2 <span class="token operator">=</span> <span class="token punctuation">{</span> b <span class="token operator">:</span> <span class="token number">4</span> <span class="token punctuation">,</span> a <span class="token operator">:</span> <span class="token number">2</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> obj1 <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// "{"a":2,"b":4}"</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> obj2 <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// "{"b":4,"a":2}"</span> |
2.3 Don’t use libraries, use util.isDeepStrictEqual
Util modules is a nodejs library that provides developers with many commonly used methods. isDeepStrictEqual
is a method to compare two objects:
1 2 | util <span class="token punctuation">.</span> <span class="token function">isDeepStrictEqual</span> <span class="token punctuation">(</span> val1 <span class="token punctuation">,</span> val2 <span class="token punctuation">)</span> |
3. Extract domain name from URL
Extract domain is what I need to get the information of a domain such as, subdomain, domain, port.
3.1 using extract-domain library
1 2 3 4 5 | <span class="token keyword">import</span> extractDomain <span class="token keyword">from</span> <span class="token string">"extract-domain"</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> url <span class="token operator">=</span> <span class="token string">"https://www.npmjs.com/package/extract-domain"</span> <span class="token punctuation">;</span> <span class="token function">extractDomain</span> <span class="token punctuation">(</span> url <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// npmjs.com</span> |
3.2 Using URL modules
1 2 3 | <span class="token keyword">var</span> url <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">URL</span> <span class="token punctuation">(</span> urlString <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> url <span class="token punctuation">.</span> hostname <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
4. API check heath.
In a microservice system, sometimes services need ONE api for the system to call to check if a service is alive (To be able to restart).
4.1 Using express
1 2 3 4 5 6 7 8 9 10 | <span class="token keyword">const</span> express <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'express'</span> <span class="token punctuation">)</span> <span class="token keyword">const</span> app <span class="token operator">=</span> <span class="token function">express</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> app <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'/'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">req <span class="token punctuation">,</span> res</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> res <span class="token punctuation">.</span> <span class="token function">send</span> <span class="token punctuation">(</span> <span class="token string">'Server is up!'</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> app <span class="token punctuation">.</span> <span class="token function">listen</span> <span class="token punctuation">(</span> <span class="token number">3000</span> <span class="token punctuation">)</span> |
- Many other framework libraries.
4.2 Don’t use real, use http module
1 2 3 4 5 6 7 8 9 10 | <span class="token keyword">const</span> http <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'http'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> <span class="token function-variable function">requestListener</span> <span class="token operator">=</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">req <span class="token punctuation">,</span> res</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> res <span class="token punctuation">.</span> <span class="token function">writeHead</span> <span class="token punctuation">(</span> <span class="token number">201</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> res <span class="token punctuation">.</span> <span class="token function">end</span> <span class="token punctuation">(</span> <span class="token string">'Server is up!'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">const</span> server <span class="token operator">=</span> http <span class="token punctuation">.</span> <span class="token function">createServer</span> <span class="token punctuation">(</span> requestListener <span class="token punctuation">)</span> <span class="token punctuation">;</span> server <span class="token punctuation">.</span> <span class="token function">listen</span> <span class="token punctuation">(</span> <span class="token number">8080</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
5. Conclusion:
- Sometimes paying a little attention to research helps our system become lighter.
- Thank you everyone for reading
- Many of you have had a similar case, comment for everyone to know. Happy sharing!!