简体   繁体   中英

Log function not working in cli app using vorpal js

I am creating a cli app using node js & vorpal. There is no syntax error or warnings and everything works perfectly except that vorpal log doesn't work. Below is a small code snippet.

 //functions.js const mkdir = require('mkdirp'); function makeDir(dirname,location) { let p = `${location}/${dirname}`; mkdir(p, function(err) { if (err) return err; return `Directory ${dirname} created !`; }); } module.exports.makeDir = makeDir; 

 //main.js const app = require('vorpal')(); const functions = require('./functions'); app .command('newdir <name> <location>', 'Create new database') .action(function(args,cb) { let name = args.name; let location = args.location; functions.makeDir(name,location,function(err,msg) { if (err) this.log(err); this.log(msg); //nothing gets logged }); cb(); }); app .delimiter('app $') .show(); 

As I said everything works fine & the directory is created but no log is displayed.

What I've Tried : Using app.log & using app.session.log. It does not even log custom strings, example : this.log('Hello')

System : Windows

The makeDir function should be coded to accept a callback and call it when done with the appropriate information passed, like below:

const mkdir = require('mkdirp');

function makeDir(dirname,location, callback /* accept a callback */ ) {
    let p = `${location}/${dirname}`;
    mkdir(p, function(err) {
        if (callback)
          callback(err ? err : null, err? null : `Directory ${dirname} created !`);
    });
}
module.exports.makeDir = makeDir;

Then you can do:

functions.makeDir(name,location,function(err,msg) {
  if (err) this.log(err);
  this.log(msg);  //nothing gets logged
} /* callback now is accepted */ );

In your action.

PS make sure you bind the this reference to your callback, for example using Function.prototype.bind so you dont get funny results when using this.log inside the callback

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM