Saturday, December 11, 2021

Javascript Function Argument Options and Object Conditionals

Summary

This post is purely some code examples of different ways to structure arguments to functions.  I show some examples of conditional object properties as well.

Base

  1. function example1(p1,p2,p3) {
  2. console.log('example1');
  3.  
  4. const params = {
  5. "p1": p1,
  6. "p2": p2,
  7. "p3": p3
  8. };
  9. console.log(params);
  10. };
  11. example1('a', 'b', 'c');
example1
{ p1: 'a', p2: 'b', p3: 'c' }


Insufficient Number of Arguments

  1. function example2(p1,p2,p3) {
  2. console.log('\nexample2')
  3. const params = {
  4. "p1": p1,
  5. "p2": p2,
  6. "p3": p3
  7. };
  8. console.log(params);
  9. };
  10. example2('a', 'b');
example2
{ p1: 'a', p2: 'b', p3: undefined }


Argument with a default value

  1. function example3(p1,p2,p3='c') {
  2. console.log('\nexample3')
  3. const params = {
  4. "p1": p1,
  5. "p2": p2,
  6. "p3": p3
  7. };
  8. console.log(params);
  9. };
  10. example3('a', 'b');
example3
{ p1: 'a', p2: 'b', p3: 'c' }


Arguments passed as an object

  1. function example4(allparms) {
  2. console.log('\nexample4')
  3. const params = {
  4. "p1": allparms.p1,
  5. "p2": allparms.p2,
  6. "p3": allparms.p3
  7. };
  8. console.log(params);
  9. }
  10. example4({"p1": 'a', "p2": 'b', "p3": 'c'});
example4
{ p1: 'a', p2: 'b', p3: 'c' }


Argument object destructured

  1. function example5({ p1,p2,p3 }) {
  2. console.log('\nexample5');
  3.  
  4. const params = {
  5. "p1": p1,
  6. "p2": p2,
  7. "p3": p3
  8. };
  9. console.log(params);
  10. };
  11. example5({"p1": "a", "p2": "b", "p3": "c"});
example5
{ p1: 'a', p2: 'b', p3: 'c' }


Destructured arguments, undefined argument

  1. function example6({ p1,p2,p3 }) {
  2. console.log('\nexample6');
  3.  
  4. const params = {
  5. "p1": p1,
  6. "p2": p2,
  7. "p3": p3
  8. };
  9. console.log(params);
  10. };
  11. example6({"p1": "a", "p2": "b"});
example6
{ p1: 'a', p2: 'b', p3: undefined }


Destructured arguments, undefined arg, conditional object property

  1. function example7({ p1,p2,p3 }) {
  2. console.log('\nexample7');
  3.  
  4. const params = {
  5. "p1": p1,
  6. "p2": p2,
  7. ...(p3 && {"p3": p3})
  8. };
  9. console.log(params);
  10. };
  11. example7({"p1": "a", "p2": "b"});
example7
{ p1: 'a', p2: 'b' }


Destructured arguments, default value

  1. function example8({ p1,p2,p3='c' }) {
  2. console.log('\nexample8');
  3.  
  4. const params = {
  5. "p1": p1,
  6. "p2": p2,
  7. ...(p3 && {"p3": p3})
  8. };
  9. console.log(params)
  10. };
  11. example8({"p1": "a", "p2": "b"});
example8
{ p1: 'a', p2: 'b', p3: 'c' }


Variadic function, spread operator

  1. function example9(...allParms) {
  2. console.log('\nexample9');
  3.  
  4. let params = {};
  5. let ind = 1;
  6. for (let parm of allParms) {
  7. params[`p${ind++}`] = parm;
  8. };
  9.  
  10. console.log(params);
  11. };
  12. example9("a", "b", "c");
example9
{ p1: 'a', p2: 'b', p3: 'c' }


Gist


Copyright ©1993-2024 Joey E Whelan, All rights reserved.

Saturday, December 4, 2021

Google Cloud Serverless VPC + Cloud Functions

Summary


I'll show an example configuration of GCP Serverless VPC Access in this post.  The scenario here will be a Cloud Function that needs to access Memorystore (GCP managed Redis).  Memorystore is isolated in a VPC with a private range address - which is good as far as security is concerned.  To access that VPC from Cloud Functions, a Serverless VPC connector needs to be built.

Architecture




Memorystore Configuration




Serverless VPC Configuration



Cloud Function Configuration





Cloud Function Redis Client Connection Code


  1. const {createClient} = require('redis');
  2.  
  3. getClient() {
  4. const client = createClient({
  5. socket: {
  6. host: process.env.REDIS_HOST
  7. },
  8. password: process.env.REDIS_PASS
  9. });
  10. client.on('error', (err) => {
  11. throw Error(`redis client error: ${err}`);
  12. });
  13. return client;
  14. }
  15.  
  1. Copyright ©1993-2024 Joey E Whelan, All rights reserved.