【问题标题】:Invalid valid error while inserting to postgress db using node and sequelize使用节点和续集插入到 postgres db 时出现无效的错误
【发布时间】:2019-09-28 22:26:06
【问题描述】:

我正在使用 node sequelize 库在 postgress db 中插入数据

这是我在 Users.ts 文件中的用户模型

export class User extends Sequelize.Model {
  public id!: number;
  public name: string;
  public email: string;
  public googleId: string;

  public password: string;
  // public preferredName!: string | null; // for nullable fields

  // timestamps!
  public readonly createdAt!: Date;
  public readonly updatedAt!: Date;

  async comparePassword(candidatePassword: string, callback: Function) {
    try {
      const isMatch = await bcrypt.compare(candidatePassword, this.password);
      callback(undefined, isMatch);
    } catch (err) {
      callback(err);
    }
  }
}

User.init(
  {
    id: {
      type: Sequelize.DataTypes.INTEGER.UNSIGNED,
      autoIncrement: true,
      primaryKey: true,
    },
    name: {
      type: Sequelize.DataTypes.STRING,
      allowNull: false,
    },
    email: {
      type: Sequelize.DataTypes.STRING(128),
      allowNull: false,
      unique: true,
    },
    googleId: {
      type: Sequelize.DataTypes.STRING(128),
      allowNull: true,
    },
    password: {
      type: Sequelize.DataTypes.STRING(300),
      allowNull: true,
    },
    token: {
      type: Sequelize.DataTypes.STRING(300),
      allowNull: true,
    },
  },
  {

    tableName: 'users',
    sequelize: sequelize, // this bit is important
  }
);

当我尝试使用

在数据库中创建新记录时
await User.create({name, email, password, address});

无论我给出什么输入,它总是返回无效值的错误

错误:无效值 { name: 'd' } 在 Object.escape (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/sql-string.js:65:11) 在 PostgresQueryGenerator.escape (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/dialects/abstract/query-generator.js:964:22) 在 PostgresQueryGenerator._whereParseSingleValueObject (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2431:41) 在 PostgresQueryGenerator.whereItemQuery (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2149:19) 在 Utils.getComplexKeys.map.prop (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2206:21) 在 Array.map () 在 PostgresQueryGenerator._whereBind (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2204:43) 在 PostgresQueryGenerator.whereItemQuery (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2139:19) 在 Utils.getComplexKeys.forEach.prop (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2048:25) 在 Array.forEach () 处 PostgresQueryGenerator.whereItemsQuery (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2046:35) 在 PostgresQueryGenerator.getWhereConditions (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2458:19) 在 PostgresQueryGenerator.selectQuery (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1279:28) 在 QueryInterface.select (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/query-interface.js:1120:27) 在 Promise.try.then.then.then (/Users/eali/learn/akasa-server/node_modules/sequelize/lib/model.js:1748:34) 在 tryCatcher (/Users/eali/learn/akasa-server/node_modules/bluebird/js/release/util.js:16:23) 在 Promise._settlePromiseFromHandler (/Users/eali/learn/akasa-server/node_modules/bluebird/js/release/promise.js:512:31) 在 Promise._settlePromise (/Users/eali/learn/akasa-server/node_modules/bluebird/js/release/promise.js:569:18) 在 Promise._settlePromise0 (/Users/eali/learn/akasa-server/node_modules/bluebird/js/release/promise.js:614:10) 在 Promise._settlePromises (/Users/eali/learn/akasa-server/node_modules/bluebird/js/release/promise.js:694:18) 在 _drainQueueStep (/Users/eali/learn/akasa-server/node_modules/bluebird/js/release/async.js:138:12) 在 _drainQueue (/Users/eali/learn/akasa-server/node_modules/bluebird/js/release/async.js:131:9)

【问题讨论】:

  • 你就这么叫吗? User.create({name, email, password, address});您需要在 create 方法中为对象键添加值... {name: 'john wayne', email: 'lol@example.com', password: '1234', address: 'Someplace 1'}
  • 我使用的是 es6 语法

标签: javascript node.js postgresql typescript sequelize.js


【解决方案1】:

我的第一个猜测是您忘记向属性键添加值:

await User.create({name, email, password, address});

应该是:

await User.create({name: 'john wayne', email: 'lol@example.com', password: '1234', address: 'Someplace 1'});

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2015-08-10
    • 2021-08-10
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多