簡體   English   中英

使用 PostgreSQL 的 SequelizeDatabaseError UPDATE

[英]SequelizeDatabaseError UPDATE using PostgreSQL

我有 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"
    ]
}

這就是我在 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;

另外,這是我的實際表結構

[解決了]

發生這種情況是因為我刪除了一個名為“last_updated”的列,該列在 UPDATE, image時用作觸發器。 現在我禁用該觸發器並可以成功更新。 我的錯誤,我從 這里導入的這個數據庫並沒有注意它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM