node.js - 使用 PostgreSQL 的 SequelizeDatabaseError UPDATE

标签 node.js postgresql express orm sequelize.js

我有 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

最佳答案

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

关于node.js - 使用 PostgreSQL 的 SequelizeDatabaseError UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64584468/

相关文章:

javascript - 如何在模型和 Controller 之间使用sequelize发送查询结果

node.js - React Router v4 URL 问题

javascript - 如何通过我的应用程序代码(即 NodeJS)将 cronjob 条目动态添加到基于 ubuntu 的容器中?

postgresql - Mybatis - 在更新插入时返回 ID

postgresql - psql: FATAL: 数据库 "<user>"不存在

python - 如何使用 Sqlalchemy postgres 搜索列中的多个值

node.js - 允许对 Heroku 上的 Express/Node.js 应用程序的 CORS REST 请求

node.js - 使用 NODE.js 进行 Stripe 身份验证并捕获费用

javascript - Node.js 和 Express : How to create many app. 通过 "for loop"与 Express.js 进行调用?

javascript - ExpressJS : Error: Can't set headers after they are sent.