node package manager

Introducing npm Enterprise add-ons. Integrate third-party dev tools into npm…

nodeutil

Node.js Utility

NodeUtil

This is just a tool collect for easy use of some tool library. I will pack some operation for more easy to use.

npm install nodeutil
var nu = require('nodeutil');
var log = nu.logger.getInstance();
log.info('Test logger...');

Or you can insert log name to getInstance() to catelogry your log...

var log = nu.logger.getInstance('MAIN_LOG');

You can also set logger some advance properties:

var log = require('nodeutil').logger.getInstance('io_sockets', {
    path: 'your-logger-path',
    catg: 'log-category-name',
    level: 'log-level',
    logMaxSize: 'max-log-file-size',
    logBackup: 'backup-days'
});

If your need to do more with log, you can extend the log4js setting like this:

var log = nu.logger.addInstance('appjs', {
        "type": "dateFile",
        "filename": 'test-log.log',
        "pattern": "-yyyy-MM-dd-ss.log",
        "alwaysIncludePattern": true
});

In addAppender(), you can put appender config using log4js config format. Related config format, please reference to log4js: https://github.com/nomiddlename/log4js-node

For date rolling log, please reference here for dateFile appender: https://github.com/nomiddlename/log4js-node/wiki/Date-rolling-file-appender

Simple log is fix format using js file name and function name as prefix. It is focus that user can easily find the log exist in

var log = require('nodeutil').simplelog;
log.info('Hello %s!');
var dateutil = no.dateutil;
var pattern = 'yyyymmdd hh24:mi:ss';
dateutil.getNowString(pattern);
dateutil.getDateString(new Date(), pattern)
var Step = nu.step;
Step(
  function step1(){
    //do something...
    return something1;
  },
  function step2(step1_returned){
    //do something
    return something2;
  },
  ...
)
var cfgutil = nu.cfgutil;
//read from json file
var cfg = cfgutil.readJsonCfg('path to json config file');
var mailer = nu.mailutil;
 
mailer.init(
  {"smtpOptions":{"service":"Gmail", "auth": {"user": "your-account","pass": "your-password"}}, "sender": "NO-REPLY <no-reply@micloud.tw>"}
);
 
mailer.sendNodeMailAsync('receiver@gmail.com',
  'test mail send...',
  'send mail OK!',
  true,
  function(){
    console.log('Send mail done...');
  }
);

Using mailutil through localhost sendmail service

var mailer = require('nodeutil').mailutil;
 
mailer.init(
      {"smtpOptions":{"host":"localhost"}, "sender": "NO-REPLY <no-reply@micloud.tw>"}
    );
 
mailer.sendNodeMailAsync('yourmail@gmail.com',
  'test mail send...',
  'send mail OK!',
  true,
  function(){
    console.log('Send mail done...');
  }
);

Advance using mailutil...

mailer.init(
  {"smtpOptions": {"service":"Gmail",
    "auth": {
      "user": "your_mail_username", "pass": "your_password"
    }},
    "sender": "NO-REPLY <no-reply@your.mail.address>"
  }
);
 
mailer.sendNodeMail({
    to:["receiver1@gmail.com"],
    subject: "test123",
    html:"<h1>TEST123</h1>",
    cc:["cc-receiver@gmail.com"],
    attachments: [//see detail: https://github.com/andris9/Nodemailer#attachment-fields 
       {   // utf-8 string as an attachment 
            fileName: "text1.txt",
            contents: "hello world!"
        },
        {   // binary buffer as an attachment 
            fileName: "text2.txt",
            contents: new Buffer("hello world!","utf-8")
        }]
  },
  true, function(res){
    console.log(res);
  }
);
var json2table = nu.json2table;
var json = [{aaa:123, bbb:223}, {aaa:223, bbb:323}];
console.log(json2table.ConvertJsonToTable(json));

The result:

<table border="1" cellpadding="1" cellspacing="1"><thead><tr><th>aaa</th><th>bbb</th></tr></thead><tbody><tr><td>123</td><td>223</td></tr><tr><td>223</td><td>323</td></tr></tbody></table>
var guid = nu.guid;
//Generate a guid without prefix and postfix 
console.log( guid.getGuid('%s%s%s', 0,0));
//Generate a guid with 2 digit prefix and 3 digit postfix 
console.log( guid.getSimpleGuid('%s-%s-%s', 2,3));
 
//Generate a guid using specifc seed 
var a = '12341234'
console.log( guid.getSimpleGuidWithSeed(a, '%s-%s-%s', 2,3));

The result:

-13ee608f7e0-
FE-13ee608f7e1-Dia
rm-12341234-eep

Create model

var validator = require('nodeutil').validator;
var usermodel = {
    username: {
      type: "string", require: true, max: 200, desc: 'the username, must provide as an email address',
      validator: validator.isEmail
    },
    password: {
      type: "string", require: false, max: 200, desc: 'the password'
    },
    sex: {
      type: "string", require: true, max: 200, desc: 'the sex'
    },
    created: {
      type: "number", require: true, max: 200, "default":-1, desc: 'the create time in number format',
      map: function(v) {
        if(v == -1) return new Date().getTime();
      }
    },
    user_type: {
      type: "number", require: true, "default": 0, pick: [0,1,2], updatable: true, desc:'the user type to define the role of user'
    },
    test: {
      type: "string", require: false, max: 200, desc: 'just for test',
      map: function(v) {
        return "111" + v;
      }
    }
  }

If the object not exist sex:

//file: test.js
var user = {
  username: 'simon',
  password: '123',
  user_type: '0'
}
 
var result = validator.check(user, usermodel);
 
console.log('check result:', result);

Run:

$ node test
 
/Users/peihsinsu/project/github-projects/nodeutil/lib/validator.js:66
      if(!vo[k] && vo[k] != 0) throw "value of key [" + k + "] not found";
                               ^
value of key [sex] not found

If the object is valid

//file: test.js
var user = {
  username: 'simon',
  password: '123',
  user_type: '0',
  sex: 'M'
}
 
var result = validator.check(user, usermodel);
 
console.log('check result:', result);

Run:

$ node test
check result: { username: 'simon',
  password: '123',
  sex: 'M',
  created: 1456637453105,
  user_type: '0' }