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