【问题标题】:SequelizeDatabaseError UPDATE using PostgreSQLSequelizeDatabaseError UPDATE 使用 PostgreSQL
【发布时间】:2021-02-11 12:06:35
【问题描述】:

我有 5 个端点,实现了 4 种方法。对于 GET、POST、DELETE,它们都运行良好。我不明白为什么 PUT 方法不起作用。就我而言,我需要更新列 first_name 和 last_name 但它会向我发送如下错误:

{
    "name": "SequelizeDatabaseError",
    "parent": {
        "length": 221,
        "name": "error",
        "severity": "ERROR",
        "code": "42703",
        "where": "PL/pgSQL function last_updated() line 3 at assignment",
        "file": "d:\\pginstaller_13.auto\\postgres.windows-x64\\src\\pl\\plpgsql\\src\\pl_exec.c",
        "line": "5170",
        "routine": "exec_assign_value",
        "sql": "UPDATE \"actors\" SET \"first_name\"=$1,\"last_name\"=$2,\"updatedAt\"=$3 WHERE \"actor_id\" = $4",
        "parameters": [
            "Anne ",
            "Anne",
            "2020-10-29 02:54:11.642 +00:00",
            "200"
        ]
    },
    "original": {
        "length": 221,
        "name": "error",
        "severity": "ERROR",
        "code": "42703",
        "where": "PL/pgSQL function last_updated() line 3 at assignment",
        "file": "d:\\pginstaller_13.auto\\postgres.windows-x64\\src\\pl\\plpgsql\\src\\pl_exec.c",
        "line": "5170",
        "routine": "exec_assign_value",
        "sql": "UPDATE \"actors\" SET \"first_name\"=$1,\"last_name\"=$2,\"updatedAt\"=$3 WHERE \"actor_id\" = $4",
        "parameters": [
            "Anne ",
            "Anne",
            "2020-10-29 02:54:11.642 +00:00",
            "200"
        ]
    },
    "sql": "UPDATE \"actors\" SET \"first_name\"=$1,\"last_name\"=$2,\"updatedAt\"=$3 WHERE \"actor_id\" = $4",
    "parameters": [
        "Anne ",
        "Anne",
        "2020-10-29 02:54:11.642 +00:00",
        "200"
    ]
}

This is how i tested in Postman

这是我的模型:

const actor = (sequelize, DataTypes) => {
  const Actor = sequelize.define('actor', {
    actor_id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      unique: true,
      autoIncrement: true,
      allowNull: false,
    },
    first_name: {
      type: DataTypes.STRING(45),
      allowNull: false,
    },
    last_name: {
      type: DataTypes.STRING(45),
      allowNull: false,
    },
    createdAt: {
      type: DataTypes.DATE,
    },
    updatedAt: {
      type: DataTypes.DATE,
    },
  });
  return Actor;
};

export default actor;

请帮帮我。我到处寻找答案,但仍然卡住了。

更新: 这是我在实例化 Sequelize 时的代码:

import Sequelize from 'sequelize';

const sequelize = new Sequelize(
  process.env.DATABASE,
  process.env.DATABASE_USER,
  process.env.DATABASE_PASSWORD,
  {
    dialect: 'postgres',
  },
);

const models = {
  Actor: sequelize.import('./actor'),
};

export { sequelize };

export default models;

这是我的 app.js:

import 'dotenv/config';
import cors from 'cors';
import express from 'express';
import path from 'path';

import models, { sequelize } from './models';
import routes from './routes';

const app = express();

// Application-Level Middleware
app.use(cors());

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.use(async (req, res, next) => {
  req.context = {
    models,
    me: await models.Actor,
  };
  next();
});

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(express.static(path.join(__dirname, 'public')));

// Routes

app.get('/', async (req, res) => {
  try {
    res.render('index');
  } catch (error) {
    res.send(error);
  }
});
app.use('/actor', routes.actor);

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

// Start

sequelize.sync().then(async () => {
  app.listen(process.env.PORT, () =>
    console.log(`App listening on port ${process.env.PORT}!`),
  );
});

module.exports = app;

Also, this is my actual table structure

【问题讨论】:

  • 请附上 2 项: 1. 您调用 Sequelize 的代码 2. 您的实际数据库表结构
  • 嗨,@aminits!我已经更新了我的问题。有我调用 Sequelize 的代码和显示我的表结构的图片

标签: node.js postgresql express orm sequelize.js


【解决方案1】:

[已解决]

发生这种情况是因为我删除了一个名为“last_updated”的列,该列在 UPDATE 时用作触发器 image 。现在我禁用该触发器并可以成功更新。 我的错误,这个数据库是我从here 导入的,没有注意它

【讨论】:

    猜你喜欢
    • 2018-04-28
    • 2022-08-17
    • 2014-11-29
    • 1970-01-01
    • 2014-12-13
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    相关资源
    最近更新 更多