登录/注册

Sequelize修改查询后的数据

用户头像管理员104阅读

在使用Node.js进行服务端开发时我们通常使用Sequelize作为ORM框架,同时使用TypeScript作为开发语言。在我们查询数据时,通常需要根据前端的参数来动态处理一些数据库查询出来的数据,这些处理无法通过模型中的get进行,只可以在路由函数中进行处理。

很多开发者会选择直接遍历查询的rows进行属性的添加,但是如果使用了TypeScript会报错。这里举个例子。

Node.js,讲解
那我们应该怎么处理呢?可以在map中使用dataValues,直接修改dataValues的值来达到修改数据,但是这样不够灵活,并且使用TS进行开发时有报错。我没有在模型中定义user_id但是我添加了一个,使用dataValues是可以的,但是有类型报错(应该是我TS版本的问题,各位同学可以尝试一下,把结果告诉我),使用forEach也可以,我这里只是一个Demo

Node.js,讲解

Node.js,讲解
同时我们也可以使用JSON.parse(JSON.stringify)深拷贝,这里不过多赘述。

Sequelize提供了几个方法:

模型中单个属性有个toJSON的方法,可以获取到get函数处理后未被Sequelize加工的对象。

  function getTypeTree() {
   return rows.map(item => {
       let _item = item.toJSON();
       return !_item.belong
         ? Object.assign({ children: rows.filter(_item => _item.belong == item.id) }, item.toJSON())
         : false;
     }).filter(item=>item);
  }


同时还要另一种使用get()

    function getTypeTree() {
      return rows
        .map(item => {
          let _item = item.get({ plain: true });
          return !_item.belong
            ? Object.assign(
                { children: rows.filter(_item => _item.belong == item.id) },
                item.toJSON()
              )
            : false;
        })
        .filter(item => item);
    }

和toJSON一样使用,,对于他们的区别和用法,这是我在其他网站查询到的;

toJSON:将当前实例转换为JSON形式,意味着会从数据库中取值,并应用所有自定义的访问器。

Node.js,讲解

Preview
登录后评论