koa手记

235 阅读3分钟
  • 不要滥用js动态语言的特性之序列化 到底要把哪些字段序列成json呢?(普通对象vs类) javascript开发者由于其语言的动态特性可能对序列化的概念很生疏,因为js可以直接修改类上的数据,而像java这种语言便不可以,由于json的序列化是参考js语言特性的,最简单的一种序列化的方式就是{}傻瓜式拼成对象键值对的方式,但是如果碰到的是类呢,前面讲到可以art.dataValue.name = flow.name,art就是我们说的类,但是这种方式(相当于直接修改了类上面的数据)是很危险的,之所以可以这样达到修改的目的是:js是动态类型语言,可以不通过内置的方法直接的去修改。不像是java有私有成员的概念(如果一个类下面某一个字段是私有的,不可能通过直接赋值的方法来进行修改的);因此我们尽量使用一些内置的方法,这样更加合理、安全。举例如果是koa项目我们使用到了sequelize可以这样art.setDataValue('name', flow.name)

问: 最终被序列化的是datavalues字段中的所有的数据,为什么koa框架知道要读取dataValues字段下所有的数据进行序列化呢?

如果是一个普通的对象进行序列化的时候,koa并不会去找dataValues字段下的数据进行序列化,当换成类的时候就会去dataValues字段中进行序列化呢?art是sequelize模型,其实是这个模型告诉koa去dataValues中进行序列化

  • js基础, extends和super
1.extends继承父类原型上的方法,即原型继承
2.静态方法不会被实例继承,但是会被子类继承
3.super可以当做:
函数:super()只能在子类的constructor中,代表父类的构造函数,在子类中调用super()从而调用
父类的构造函数,将父类构造函数中的属性和方法添加到子类的this上面,实现子类继承父类构造函数上
的属性和方法、
注意: 子类必须在constructor方法中定义super()后constructor中才能使用this,否则会报错
原因: 子类自己的this必须通过父类的构造函数进行塑造,得到与父类同样的属性和方法(即调用父类的constructor),再对其加工加上子类自己的属性和方法,如果不调用super,子类就得不到this。
对象:在子类的静态方法》代表父类本身, 在子类的普通方法中代表父类原型
4.constructor构造函数中的new.target指的是当前类或者构造器
  new.target的作用
  ------限制类的调用方法,判断new.target是不是未定义
  -----写出只能被继承使用的类
class Shape {
  constructor() {
    if (new.target === Shape) {
      throw new Error('本类不能实例化');
    }
  }
}
 
class Rectangle extends Shape {
  constructor(length, width) {
    super();
    // ...
  }
}
 
var x = new Shape();  // 报错
var y = new Rectangle(3, 4);  // 正确
  • 操作数据库 注意数据库事务 一个设计比较完整数据库都有几个比较完整的特性,简称ACID(原子性、一致性、隔离性、持久性) 保持数据一致性合法性 mogodb早年被诟病的一个原因就是没有数据库事务这个机制,从4.0开始就支持此机制了 sequelize相对于其他的orm框架来说,它的事务的编写比较麻烦且怪异

数据库事务的特性: 对于关系型数据库来说有非常多

  • 我们开发api的时候代码要尽量简洁,越上层的代码越简单让其他同学也很容易看懂,尽可能的把一些复杂的或者冗余的代码向底层model靠拢

更新中。。。