一共有 35 篇文章,分页:1 / 7

svn命令备忘

  • 回滚未提交的修改

    svn revert -R path/
    
  • 删除

    svn del path/
    
  • 查看本地修改的文件列表

    svn status
    
  • 提交

    svn commit -m "日志内容"
    
  • 一次性添加所有新增文件

    svn add --force path/to/dir
    

VSCode必备插件

  • ESLint

  • js-css-html-formatter

  • vetur

给 nodejs 的 console.log 和 console.error 增加时间戳

把下面的代码放在app.js(一般是这个名字吧。。。)最前面就行了(是改的全局的,只放在一个js文件就可以)


(function() { //add timestamp to console.log and console.error(from http://yoyo.play175.com)
    var date = new Date();

    function now() {
        date.setTime(Date.now());
        var m = date.getMonth() + 1;
        var d = date.getDate();
        var hour = date.getHours();
        var minutes = date.getMinutes();
        var seconds = date.getSeconds();
        var milliseconds = date.getMilliseconds();
        return '[' + ((m < 10) ? '0' + m : m) + '-' + ((d < 10) ? '0' + d : d) +
            ' ' + ((hour < 10) ? '0' + hour : hour) + ':' + ((minutes < 10) ? '0' + minutes : minutes) +
            ':' + ((seconds < 10) ? '0' + seconds : seconds) + '.' + ('00' + milliseconds).slice(-3) + '] ';
    }
    var log = console.log;
    console.error = console.log = function() {
        var prefix = ''; //cluster.isWorker ? '[WORKER '+cluster.worker.id + '] ' : '[MASTER]';
        if (typeof(arguments[0]) == 'string') {
            var first_parameter = arguments[0]; //for this:console.log("%s","str");
            var other_parameters = Array.prototype.slice.call(arguments, 1);
            log.apply(console, [prefix + now() + first_parameter].concat(other_parameters));
        } else {
            var args = Array.prototype.slice.call(arguments);
            log.apply(console, [prefix + now()].concat(args));
        }
    }
})();

网站性能测试工具webbench

网站性能测试工具 官网地址:http://home.tiscali.cz/~cz210552/webbench.html

wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
tar -xf webbench-1.5.tar.gz
cd webbench-1.5
make && make install

make时可能会遇到“install: cannot create regular file `/usr/local/man/man1': No such file or directory”这个错误 解决办法就是手动建立这个文件夹:

mkdir -p /usr/local/man

命令输入:webbench -help 即可看到使用说明

ref:http://www.cnblogs.com/xxyBlogs/p/5639103.html

让nodejs方法同时支持async/await和回调模式调用

使用async/await可以让你用同步的方式写代码,忘掉callback,简直不能更爽,但是原来的老接口不支持async/await调用怎么办呢?

我琢磨出下面一个方法,根据最后一个参数是否是function类型的参数,来判断是哪种调用,而且做到可以无痛改造原有方法。

function promisify (func, this_obj) {//(from http://yoyo.play175.com)
    return function() {
        if (arguments.length > 0 && arguments[arguments.length - 1].constructor == Function) {
            //回调模式
            func.apply(this_obj, arguments);
        } else {
            //否则是Promise或者async/await模式
            let args = arguments;
            return new Promise((resolve, reject) => {
                Array.prototype.push.call(args, function(err, ret) {
                    if (err) {
                        //有错误产生
                        reject.call(this_obj, err);
                    } else {
                        //没有错误产生,去掉第一个err参数
                        let other_parameters = Array.prototype.slice.call(arguments, 1);
                        resolve.apply(this_obj, other_parameters);
                    }
                });
                func.apply(this_obj, args);
            });
        }
    };
}

当然这里有一个前提要求是回调方法的第一个参数必须是接受错误信息的参数,然后回调函数是这个方法最后一个参数。

例如有一个接口getuser,原来是这样的:

api.getuser = function(id,callback){
    callback(users[id]);
};

回调模式调用会是这样:

api.getuser(123,function(err,user){
    //得到user
});

现在我们给他改造一下,让它同时支持async/await调用,很简单,只是把function用promisify包装一下 :

api.getuser = promisify(function(id,callback){
    callback(users[id]);
});

现在它可以被回调模式调用,也同时支持async/await调用:

var user = await api.getuser(123);