前言

之前因为测试需求,搞了一段时间 node.js,还在成长中。node.js 目前在各大 IT 公司(阿里,eBay,微软)被广泛使用,笔者所在游戏产业相对少点。
本文通过 1 个业务逻辑场景的案例,来讲讲 node.js 调式和调式的 debug 锁。
调式方法有很多,主要还是依赖控制台 API console.log,通过这个确定对象正确性和执行步骤。

业务逻辑

一段用户昵称相关的函数

var socketio = require("socket.io");
var roleId = 1;  //用户编号
var roleName = {};//用户昵称
var namesUsed = []; //定义数组存用户昵称


//变更用户昵称
function changeroleName(socket,roleId,roleName,namesUsed) {
    var name = 'role'+ roleId;//用name去存新生成的id,role是标记

    roleName[socket.id] =name;//用户昵称和name关联上
    socket.emit('roleNameResult',{  //返回提交后的用户昵称
           success:true,
           name:name     //'role'+roleId
        });
    namesUsed.push(name);//这里存放被占用的昵称
    return roleId +1;//作为生成昵称的计时器
    console.log(roleId);
};

调式

简单演示,这段代码也没啥串业务的风险。name 也可以 this name:name 做为构造器调用。
但是平时的程序需确保代码是否有逻辑问题(比如 cb 后的值是否正确,是否同样的数值只取 1 次),需要打印一些测试用的关键信息。这里暂时取 name 和 roleId

function changeroleName(socket,roleId,roleName,namesUsed) {
    var name = 'role'+ roleId;//用name去存新生成的id,role是标记
    console.log(name);
    roleName[socket.id] =name;//用户昵称和name关联上
    socket.emit('roleNameResult',{  //返回提交后的用户昵称
           success:true,
           name:name     //'role'+roleId
        });
    namesUsed.push(name);//这里存放被占用的昵称
    return roleId +1;//作为生成昵称的计时器
    console.log(roleId);
};

debug 锁

了解下 debug 沙盒,写入另外 1 个文件,然后在上面 js 里面引用。
Client 需要用到 module.exports = Client;

var Client = function () {
    this.caseData = {      
        debug: 0
    };
};
//Client实例log方法
Client.prototype.log = function (msg, name, level) {
    var self = this;   //Client空的对象,在处理逻辑业务的地方被其他引用
    var level = level || 'log'; //这里log默认是0
    var name = name || 'robot';  //self->robot
    if (self.caseData.debug) {   //debug锁
        console[level]('%s - %s - %s - %s', new Date().toLocaleTimeString(), level, name, msg)
    }
};

然后例子代码可以写成以下情况,开启执行 console.log debug:1,debug:0 就不执行。实际工作中通篇的代码以后要维护,不用锁的话,处理大量控制台语句很影响效率

function changeroleName(socket,roleId,roleName,namesUsed) {
    var name = 'role'+ roleId;//用name去存新生成的id,role是标记

    if (robot.caseData.debug) {    //debug锁
    console.log(name);
    }
    roleName[socket.id] =name;//用户昵称和name关联上
    socket.emit('roleNameResult',{  //返回提交后的用户昵称
           success:true,
           name:name     //'role'+roleId
        });
    namesUsed.push(name);//这里存放被占用的昵称
    return roleId +1;//作为生成昵称的计时器
    if (robot.caseData.debug) {    //debug锁
    console.log(roleId);
    }
};


↙↙↙阅读原文可查看相关链接,并与作者交流