You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js+Sequelize创建预约时遇psicologos_id无默认值错误求助

问题:Sequelize创建预约时psicologos_id字段未传入导致数据库错误

我正在使用Node.js和Sequelize开发CRUD系统,包含psicologos(心理学家)、pacientes(患者)、atendimentos(预约)三张表。创建预约时,通过JWT Token的req.auth.id获取psicologos_id,通过请求体传递pacientes_id。

相关代码

预约表迁移代码

psicologos_id: {
  type: Sequelize.INTEGER,
  allowNull: false,
  references: { model: 'psicologos', key: 'id' },
  onUpdate: 'CASCADE',
  onDelete: 'CASCADE',
},
pacientes_id: {
  type: Sequelize.INTEGER,
  allowNull: false,
  references: { model: 'pacientes', key: 'id' },
  onUpdate: 'CASCADE', 
  onDelete: 'CASCADE',
},

模型定义

预约模型(Atendimentos)

const { Model, DataTypes } = require('sequelize');

class Atendimentos extends Model {
  static init(sequelize) {
    super.init({
      data_atendimento: DataTypes.DATE,
      observacao: DataTypes.STRING,
    }, {
      sequelize,
      tableName: 'atendimentos',
    })
  }
 static associate(models) {
    this.belongsTo(models.Pacientes, { foreignKey: 'pacientes_id', as: 'pacientes' });
    this.belongsTo(models.Psicologos, { foreignKey: 'psicologos_id', as: 'psicologos' });
  }
}

module.exports = Atendimentos;

心理学家模型(Psicologos)

const { Model, DataTypes } = require('sequelize');
const bcrypt = require("bcryptjs")

class Psicologos extends Model {
  static init(sequelize) {
    super.init({
      nome: DataTypes.STRING,
      email: DataTypes.STRING,
      senha: DataTypes.STRING,
      apresentacao: DataTypes.STRING,
    }, {
      sequelize,
      tableName: 'psicologos'
    })
  }
   static associate(models) {
      this.hasMany(models.Atendimentos, { foreignKey: 'psicologos_id', as: 'psicologos' });
  }
}

module.exports = Psicologos;

患者模型(Pacientes)

const { Model, DataTypes } = require('sequelize');

class Pacientes extends Model {
  static init(sequelize) {
    super.init({
      nome: DataTypes.STRING,
      email: DataTypes.STRING,
      idade: DataTypes.INTEGER,
    }, {
      sequelize
    })
  }
  static associate(models) {
    this.hasMany(models.Atendimentos, { foreignKey: 'pacientes_id', as: 'pacientes' });
}
}

module.exports = Pacientes;

预约控制器store方法

async store(req, res) {
  const token = req.auth.id;
  const { pacientes_id, data_atendimento, observacao} = req.body;

  const criarAtendimento = {
    psicologos_id: token,
    pacientes_id,
    data_atendimento,
    observacao,
  }

  await Atendimentos.create(criarAtendimento);

  return res.status(201).json(criarAtendimento);
},

错误信息

Executing (default): INSERT INTO `atendimentos` (`id`,`data_atendimento`,`observacao`,`created_at`,`updated_at`) VALUES (DEFAULT,?,?,?,?);
node:internal/process/promises:279
            triggerUncaughtException(err, true /* fromPromise */);
            ^

Error
    at Query.run (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/sequelize/lib/dialects/mysql/query.js:52:25)
    at /Users/pedro/Workspace/Gama Academy/lavie/node_modules/sequelize/lib/sequelize.js:311:28
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async MySQLQueryInterface.insert (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/sequelize/lib/dialects/abstract/query-interface.js:308:21)
    at async Atendimentos.save (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/sequelize/lib/model.js:2432:35)
    at async Function.create (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/sequelize/lib/model.js:1344:12)
    at async store (/Users/pedro/Workspace/Gama Academy/lavie/src/controllers/AtendimentosController.js:35:5) {
  name: 'SequelizeDatabaseError',
  parent: Error: Field 'psicologos_id' doesn't have a default value
      at Packet.asError (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/packets/packet.js:728:17)
      at Execute.execute (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/commands/command.js:29:26)
      at Connection.handlePacket (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/connection.js:456:32)
      at PacketParser.onPacket (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/connection.js:85:12)
      at PacketParser.executeStart (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/packet_parser.js:75:16)
      at Socket.<anonymous> (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/connection.js:92:25)
      at Socket.emit (node:events:527:28)
      at addChunk (node:internal/streams/readable:315:12)
      at readableAddChunk (node:internal/streams/readable:289:9)
      at Socket.Readable.push (node:internal/streams/readable:228:10) {
    code: 'ER_NO_DEFAULT_FOR_FIELD',
    errno: 1364,
    sqlState: 'HY000',
    sqlMessage: "Field 'psicologos_id' doesn't have a default value",
    sql: 'INSERT INTO `atendimentos` (`id`,`data_atendimento`,`observacao`,`created_at`,`updated_at`) VALUES (DEFAULT,?,?,?,?);',
    parameters: [
      '2020-01-01 10:10:00',
      'teste',
      '2022-07-26 04:07:30',
      '2022-07-26 04:07:30'
    ]
  },
  original: Error: Field 'psicologos_id' doesn't have a default value
      at Packet.asError (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/packets/packet.js:728:17)
      at Execute.execute (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/commands/command.js:29:26)
      at Connection.handlePacket (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/connection.js:456:32)
      at PacketParser.onPacket (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/connection.js:85:12)
      at PacketParser.executeStart (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/packet_parser.js:75:16)
      at Socket.<anonymous> (/Users/pedro/Workspace/Gama Academy/lavie/node_modules/mysql2/lib/connection.js:92:25)
      at Socket.emit (node:events:527:28)
      at addChunk (node:internal/streams/readable:315:12)
      at readableAddChunk (node:internal/streams/readable:289:9)
      at Socket.Readable.push (node:internal/streams/readable:228:10) {
    code: 'ER_NO_DEFAULT_FOR_FIELD',
    errno: 1364,
    sqlState: 'HY000',
    sqlMessage: "Field 'psicologos_id' doesn't have a default value",
    sql: 'INSERT INTO `atendimentos` (`id`,`data_atendimento`,`observacao`,`created_at`,`updated_at`) VALUES (DEFAULT,?,?,?,?);',
    parameters: [
      '2020-01-01 10:10:00',
      'teste',
      '2022-07-26 04:07:30',
      '2022-07-26 04:07:30'
    ]
  },
  sql: 'INSERT INTO `atendimentos` (`id`,`data_atendimento`,`observacao`,`created_at`,`updated_at`) VALUES (DEFAULT,?,?,?,?);',
  parameters: [
    '2020-01-01 10:10:00',
    'teste',
    '2022-07-26 04:07:30',
    '2022-07-26 04:07:30'
  ]

我已经尝试了各种方法,但问题依然存在,希望有人能帮忙解决。

内容的提问来源于stack exchange,提问作者Pedro Fontes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 00:36:25