0

I'm not that expert, but I can handle it: this calling the function checkTLS

// params={ibmdev_tls: 'not imp',ibmqa_tls: 'not imp',ibmqa_ssl: 'not imp'}  

Object.keys(params).forEach( key => {
    console.log(key);
    if(key.includes("tls")){ 
        //splitting parms to get cluster id
        clusterId=key.substring(0, key.indexOf("_"));
        console.log("cluster ID=="+clusterId);
        tlsresualt= checkTLS(clusterId);
        console.log("tls resualt is="+ tlsresualt);
        req.body[`${clusterId}_tls`]=tlsresualt;
        console.log(req.body.ibmdev_tls);
        console.log("==================================");
    }
});

The checktlsStatus is what I need to pass:

function checkTLS(clusterID){
    fs.readFile("clusterinfo/clusterinfo.json",(err, clusters) => {
        TlsVerion="TLS12";
        if(TlsVerion.includes("TLS12")){ 
            console.log(`TLs check status ------------------------ for ${clusterID}`);
            console.log(` TLs match the Secuity Baseline requirment for ${clusterID}`);
            checktlsStatus="implemented";
            //req.body.ibmdevtls=tlsStatus;
            //return console.log(checktlsStatur+ "check for tls successed");
            // req.body.(`${clusterID}`+`tls`)=tlsStatus;
            return checktlsStatus;
        }
    )};
}

I have tried await and asycn , also execSync(sleep 20);

2 Answers2

0

I have modified your code with same functionality using async and await. Contents variable has the read file's contents.

    const fs = require('fs')
    const util = require('util')`enter code here`
    const readFileContent = util.promisify(fs.readFile)
    const fetchFile = async (path,clusterID) => {
    const buff = await readFileContent(path)

    const contents = buff.toString()
    TlsVerion="TLS12";
    if(TlsVerion.includes("TLS12")){ 
          console.log(`TLs check status ------------------------ for ${clusterID}`);
          console.log(` TLs match the Secuity Baseline requirment for ${clusterID}`);
          checktlsStatus="implemented";
          return checktlsStatus;
      }
      console.log(`\nContents of the file :`)
    }
       

    async function neo(){
        params={ibmdev_tls: 'not imp',ibmqa_tls: 'not imp',ibmqa_ssl: 'not imp'}  

        for (const property in params) {
            console.log(property);
            if(property.includes("tls")){ 
                //splitting parms to get cluster id
                clusterId=property.substring(0, property.indexOf("_"));
                console.log("cluster ID=="+clusterId);
                tlsresualt = await fetchFile('file.json',clusterId);
                console.log("tls resualt is="+ tlsresualt);
                console.log("==================================");
        }
        }
    }


    neo()

Reference from Here. You may refer the same for detailed explanation

Rajesh Ramesh
  • 15
  • 1
  • 7
0

Callback doesn't work that way!

Think about this:

function foo(name, callback) {
  callback(name.length);
}

function bar() {
  const abc = foo("something", (n) => {
    return n + 10;
  });
  console.log(abc);
}

bar();

The abc will always undifined because foo has no return value!

The callback return value is omitted by foo.

This is how you think fs.readFile works. But it not work like that way!


There is someways to solve it:

  1. Add a callback to checkTLS function.
  2. Use fs.readFileSync.
  3. (Recommand)Use Promise(async/await) API.

Let's do it:

const fs = require("fs");
params={ibmdev_tls: 'not imp',ibmqa_tls: 'not imp',ibmqa_ssl: 'not imp'}  

Object.keys(params).forEach(async (key) => {
    console.log(key);
    if(key.includes("tls")){ 
        //splitting parms to get cluster id
        clusterId=key.substring(0, key.indexOf("_"));
        console.log("cluster ID=="+clusterId);
        // this changed
        const tlsresualt = await checkTLS(clusterId);
        console.log("tls resualt is="+ tlsresualt);
        // req.body[`${clusterId}_tls`]=tlsresualt;
        // console.log(req.body.ibmdev_tls);
        console.log("==================================");
    }
});

async function checkTLS(clusterID){
    const clusters = await fs.promises.readFile("clusterinfo/clusterinfo.json");
    TlsVerion="TLS12";
    if(TlsVerion.includes("TLS12")){ 
        console.log(`TLs check status ------------------------ for ${clusterID}`);
        console.log(` TLs match the Secuity Baseline requirment for ${clusterID}`);
        checktlsStatus="implemented";
        //req.body.ibmdevtls=tlsStatus;
        //return console.log(checktlsStatur+ "check for tls successed");
        // req.body.(`${clusterID}`+`tls`)=tlsStatus;
        return checktlsStatus;
    }
}

I'm not sure what you want to do. So just remake checkTLS to an async function.


I recommand use fs.promises and async/await, if you don't want it. Try this:

const fs = require("fs");

params={ibmdev_tls: 'not imp',ibmqa_tls: 'not imp',ibmqa_ssl: 'not imp'}  

Object.keys(params).forEach( key => {
    console.log(key);
    if(key.includes("tls")){ 
        //splitting parms to get cluster id
        clusterId=key.substring(0, key.indexOf("_"));
        console.log("cluster ID=="+clusterId);
        // this changed
        checkTLS(clusterId)
            .then(tlsresualt => {
                console.log("tls resualt is="+ tlsresualt);
                // req.body[`${clusterId}_tls`]=tlsresualt;
                // console.log(req.body.ibmdev_tls);
                console.log("==================================");
            });
    }
});

function checkTLS(clusterID){
    return new Promise(resolve => {
        fs.readFile("clusterinfo/clusterinfo.json",(err, clusters) => {
            TlsVerion="TLS12";
            if(TlsVerion.includes("TLS12")){ 
                console.log(`TLs check status ------------------------ for ${clusterID}`);
                console.log(` TLs match the Secuity Baseline requirment for ${clusterID}`);
                checktlsStatus="implemented";
                //req.body.ibmdevtls=tlsStatus;
                //return console.log(checktlsStatur+ "check for tls successed");
                // req.body.(`${clusterID}`+`tls`)=tlsStatus;
                resolve(checktlsStatus);
            }
        });
    });
}


References:

LiHS
  • 134
  • 6