第二篇 nodejs 关于 面向对象 及 class 的使用初探

写在最前面:
只是测试,有些凌乱!

这几天开始写密记的后台,到处随意看来看 node 和js的语法,感觉乱糟糟的,什么 mean 架构,什么js 什么 es6,真是一团乱麻,习惯了面向对象,突然让我有些无从下手,还好我以前做 php 和 c的时候有些面向过程的经验,扣来扣去也能测试几个简单的接口,但是像我这有点自虐倾向的人还是不太满意,决定还是用 面向对象来的方式来写吧。
发现es6 好像有class的概念,所以就决定用在node测试一下,看看是否凑效!

1. 新建一个test.js 文件,代码如下:

/**
 * @authors lpn (lpn@lpn.com)
 * @date    2017-01-16 13:59:27
 * @version V0.0.1
 */

class BaseResult{
    constructor(code,msg,data){
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    setCode(code){
        this.code = code;
    }
    getCode(){
        return this.code;
    }
    setMsg(msg){
        this.msg = msg;
    }
    getMsg(){
        return this.msg;
    }
    setData(data){
        this.data = data;
    }
    getData(){
        return this.data;
    }
    getRes(){
        return {'code':this.code,'msg':this.msg,'data':this.data};
    }
}

const SUCCESS = new BaseResult(0,'成功',{a:10,b:[{c:10,d:20},{e:30,f:40}]});
console.log(SUCCESS);

呵呵 打印一下发现没问题 好像可以new 真的可以new,好激动!

这里写图片描述
.
2. 那就把这个类改造成一个通用的 response 类吧!
经过几次测试发现还是这样比较靠谱!

/**
 * @authors lpn (lpn@lpn.com)
 * @date    2017-01-16 13:59:27
 * @version V0.0.1
 */

class BaseResult{
    constructor(code,msg,data){
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    setCode(code){
        this.code = code;
    }
    getCode(){
        return this.code;
    }
    setMsg(msg){
        this.msg = msg;
    }
    getMsg(){
        return this.msg;
    }
    setData(data){
        this.data = data;
    }
    getData(){
        return this.data;
    }
    getRes(){
        return {'code':this.code,'msg':this.msg,'data':this.data};
    }
}

module.exports = {
    // 通用
    SUCCESS                 :       new BaseResult(0,'成功',{}),
    FAILED                  :       new BaseResult(1,'失败',{}),
    //用户
    USER_PASSWORD_ERROR     :       new BaseResult(101,'用户名或密码错误',{}),
    USER_CAPTCHA_ERROR      :       new BaseResult(102,'验证码错误',{})
}

.
3. 然后加 express 试试请求结果怎么样,新建mainTest.js,上代码

/**
 * @authors lpn (lpn@lpn.com)
 * @date    2017-01-16 21:43:06
 * @version V0.0.1
 */
var express = require('express');
var app = express();
app.listen(5000);
console.log('Server listening on 5000');

var BaseResult = require('./test');

BaseResult.SUCCESS.setData({a:10,b:[{c:20,d:30},{e:40,f:50}]});
app.get('/',function(req,res){
    res.send(BaseResult.SUCCESS);
});


//BaseResult.USER_PASSWORD_ERROR.setData();
app.post('/user',function(req,res){
    res.send(BaseResult.USER_PASSWORD_ERROR);
})

拿 posotman 请求 有结果,呵呵 有点意思,好像又回到了从前
get 请求

post 请求

.
4. 其实这里有好几个让我迷惑的地方:

  1. res.send 和 res.json 我测试过他们的返回结果是一样的,估计是express对返回数据处理的时候,发现是对象就会用json 封装,是String res.send会直接返回text

  2. 在代码中也许有人看到有个 getRes方法,其实最开始我是担心直接返回对象会被解析错误,但是后来测试的时候发现那个是没必要的,没想到nodejs还挺聪明的!

.
5. soso 接着测试 类的继承

创建个 Base.js 上代码

/**
 * @authors lpn (lpn@lpn.com)
 * @date    2017-01-16 23:56:50
 * @version V0.0.1
 */

class Base{
    constructor(arg1,arg2){
        this.arg1 = arg1;
        this.arg2 = arg2;
    }

    save(){
        console.log('Parent Saving.....   '+this.arg1);
    }

    update(){
        console.log('Parent Updating!!!!  '+this.arg2);
    }
}

class User extends Base{
    constructor(arg1,arg2,arg3){
        super(arg1,arg2);
        this.arg3 = arg3;
    }

    remove(){
        console.log('Child Removing!!!!  '+this.arg3);
    }

    update(){
        console.log('Child Updating ... '+this.arg3);
    }
}

user = new User('小明','老王','lpn');
user.save();
user.update();
user.remove();

看看打印结果,跟想要的一样
类的继承

既然能这么玩,那就方便多啦!

.
6. 总结:node 资源包很多,坑也很多,是好事也是坏事,有的时候去琢磨配置一个包的时间就能写两个同样能完成任务的类了!

阅读更多

没有更多推荐了,返回首页