之前因为测试需求,搞了一段时间 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 沙盒,写入另外 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);
}
};