js快速排序 循环 Java程序员 oracle date elasticsearch unicode ros 打印 openssl alertifyjs 河南普通话 vue教学视频 移动端上传图片插件 office配置进度 oracle可视化工具 oracle查看所有数据库 python输出 python文件操作 python代码 python数字类型 python正则匹配数字 java将数据写入文件 怎么装linux系统 php网络编程 php案例 摩斯电码翻译器 0x8002801c din字体下载 ae脚本管理器 maya2016教程 男网红头像 dos系统下载 flushdns 卧龙推广 c语言小游戏代码 下拉框默认选中 移动硬盘检测工具 凯立德导航地图 wmv格式转换器 徐静蕾字体
当前位置: 首页 > 学习教程  > 

自己写NodeJs开发规范

2020/10/16 18:00:04 文章标签: nodejs后端开发

2019独角兽企业重金招聘Python工程师标准>>> 开发规范 命名规范注释规范方法定义以及,exports规范测试规范(待完善)GIT管理规范命名规范 >1. 变量命名,首字母小写,其余首字母大写方式,如&…

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

开发规范


  • 命名规范
  • 注释规范
  • 方法定义以及,exports规范
  • 测试规范(待完善)
  • GIT管理规范

命名规范
>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,缩写单词需要注释,但是应该尽量避免使用缩写单词
//用户具有的money
var 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');

//测试UserProxy
describe('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


本文链接: http://www.dtmao.cc/news_show_300273.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?