Sequelize 默认方法 findOne bug

Posted

技术标签:

【中文标题】Sequelize 默认方法 findOne bug【英文标题】:Sequelize default method findOne bug 【发布时间】:2021-03-18 14:40:45 【问题描述】:

Obs.:我正在使用 Sequelize 最新版本、迁移、控制器和模型

我有一个名为 Tokens 的模型:

'use strict';
module.exports = (sequelize, DataTypes) => 
  const Tokens = sequelize.define('Tokens', 
    usuarios_id: 
      type: DataTypes.INTEGER,
      allowNull: false
    ,
    token: 
      type: DataTypes.STRING,
      unique: true
    ,
    empresa_id: 
      type: DataTypes.INTEGER,
      allowNull: false
    
  , 
    paranoid: false,
    freezeTableName: true
  );
  Tokens.associate = function(models) 
    // associations can be defined here
  ;
  return Tokens;
;

我在中间件中调用 findOne() 方法,如下所示:

const token = await Tokens.findOne( where: token: tokenHeader )

日志记录返回我拥有的更多字段,但我将它们从模型和迁移中删除:

Executing (default): SELECT "id", "usuarios_id", "token", "empresa_id", "createdAt", "updatedAt" FROM "Tokens" AS "Tokens" WHERE "Tokens"."token" = '900150983cd24fb0d6963f7d28e17f72';

【问题讨论】:

【参考方案1】:

默认情况下,Sequelize 会将 createdAt 和 updatedAt 属性添加到您的模型中,这样您就可以知道数据库条目何时进入数据库以及上次更新的时间。如果您不想要这些字段,可以将timestamps: false 传递给配置。

文档链接:https://sequelize.org/v5/manual/models-definition.html#timestamps

【讨论】:

是的,我知道。但是有“id”字段,我不想要它

以上是关于Sequelize 默认方法 findOne bug的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize - findOne().success() 未定义

[usedIf在数据库中时,sequelize findOne找不到用户标识

将属性添加到 Sequelize FindOne 返回的对象

Node.js学习13~基于node-sequelize的查询器,附代码举例

Sequelize 中的 WhereHas 方法

Sequelize查询执行顺序错误