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
相关产品推荐
相关产品推荐

