博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己写NodeJs开发规范
阅读量:6343 次
发布时间:2019-06-22

本文共 3665 字,大约阅读时间需要 12 分钟。

hot3.png

开发规范



命名规范
>1. 变量命名,首字母小写,其余首字母大写方式,如:userAddress, articleTitle 等等>2. 方法命名,同变量命名,如:sayHello(), printLog() 等等>3. 类命名, 所有单词首字符大写,如 User, UserPermission>4. 常量命名, 所有单词大写,以下化线分割, 如 APP_ID, APP_SECRET等等>5. 适用以上所有,命名应该尽量通俗易懂,如 getUserByUsername,getUserById 要好于getUserByCondition(),更多详情可以参考 [《代码整洁之道》](http://item.jd.com/10064006.html)

<A NAME="comment"></A>注释规范
>1. 方法注释,如根据用户名密码验证用户:
/** * 验证用户合法性(方法作用) * *@param {String} username 用户名 (参数注释) *@param {String} password 密码(参数注释) *@param {function} callback * - err * - User **/var authenticate = function(username, password, callback){    User.findOne({username:username,password:password}, callback);}
>2. 类注释
/** * 分页控件类 * *@param {Number} page 当前页 *@param {Number} perPage 每页记录数 *@param {Number} total 总页数 *@param {Array} items 记录条目(如查询第一页图书,items为第一页图书所有记录) **/function Paginate(page, perPage, total, items){    this.page = page;    this.perPage = perPage;    this.total = total;    this.items = items;}
>3. 普通变量注释,一般通俗易懂变量无需注释,如username, password,或者通俗英语单词travelRoute,缩写单词需要注释,但是应该尽量避免使用缩写单词
//用户具有的moneyvar userOwnMoney = 1000;
>4. 类变量注释:
/** * 分页控件类 * *@param {Number} page 当前页 *@param {Number} perPage 每页记录数 *@param {Number} total 总页数 *@param {Array} items 记录条目(如查询第一页图书,items为第一页图书所有记录) **/function Paginate(page, perPage, total, items){    this.page = page;    //下一页    this.nextPage = this.page + 1;}

方法定义以及,exports规范
>1. proxy, controller, middleware 中的方法采用var定义, 所有exports放在文件最后,方便代码复用,如验证用户是否登录中间件,以及验证是否登录并且用户账号类型是销售的中间件定义[代码地址](http://gitlab.tulingdao.com/top/tree/development/modules/auth/routes/middleware/index.js):
/** * 验证是否登陆 * * @param req * @param res * @param next */var requireLogin = function(req, res, next){    var user = req.session.user;    if(!user){        if(req.xhr){            res.jsonp({errcode:-99, errmsg:'您还没有登录或者已经超时'});        }else{            req.session.error = '您还没有登录或者已经超时';            res.redirect('/auth/login?next='+req.originalUrl);        }    }else{        next();    }}/** * 验证是否登陆并且账号类型是旅行社 * * @param req * @param res * @param next */var requireLoginAndTravelOrgAccount = function(req, res, next){    var user = req.session.user;    requireLogin(req, res, function(){   //此处复用了requireLogin中间件        if(User.isAccess(User.TRAVEL_ORG_ACCOUNT_TYPE, user.accountType)){            next();        }else{            req.session.error = '您不具备旅行社账号权限';            req.redirect('/');        }    })}

测试规范(待完善)
>1. 所有方法需要书写单元测试>2. 测试使用mocha框架,详情见[http://visionmedia.github.io/mocha/#installation]>3. 测试路径与源代码采用相同路径,如 源代码下 controllers/user ,测试代码下是 test/controllers/user, 具体如下:
top       -modules            - auth                - controllers                - models                - proxy            - 其他模块        - test            - auth                - controllers                - models                - ...            - test.js在test.js中require所有测试文件
>4. 测试举例如下:
/** * Created by hp-wanglihui on 2014/6/2. */'use strict';var User = require('../../models').User;var UserProxy = require('../../proxy').UserProxy;var assert = require('assert');//测试UserProxydescribe('UserProxy', function(){    //测试newAndSave方法    describe('#newAndSave',function(){        it('it should add success and callback(null, User instance)', function(){            var username = Date.now()+'';            var email = username+'@test.com';            var password = '123456';            var user = new User({email:email, username:username, password:password});            UserProxy.newAndSave(user, function(err, user){                assert.equel(null, err);                assert.equal(true, user instanceof User);            })        })    })})

转载于:https://my.oschina.net/wanglihui/blog/284287

你可能感兴趣的文章
Mac / Windows 下的 FTP 工具filezilla
查看>>
CentOS7中使用yum安装Nginx的方法
查看>>
SparseArray源码解析
查看>>
第1件事 产品经理工作的8个核心步骤
查看>>
危急,不要任意让站点记住password自己主动登陆!
查看>>
初试ASP.NET Web API/MVC API(附Demo)
查看>>
Unable to locate package错误解决办法
查看>>
Spark 官方博文专区(目录)
查看>>
[原][osgEarth]添加自由飞行漫游器
查看>>
AnimatorCompatHelper clearInterpolator
查看>>
代码审查 Code Review
查看>>
fastjson如何指定字段不序列化
查看>>
翻译:window function(已提交到MariaDB官方手册)
查看>>
centos安装Django之一:安装openssl
查看>>
linux下mysql开启远程访问权限及防火墙开放3306端口
查看>>
[日常] Go语言圣经--示例: 并发的Echo服务
查看>>
nginx配置80端口访问8080+项目名地址
查看>>
BZOJ1969: [Ahoi2005]LANE 航线规划(LCT)
查看>>
linux内存管理之malloc、vmalloc、kmalloc的区别
查看>>
ubuntu14.04终端分屏terminator的安装使用与配置
查看>>