node.js - NestJS با TypeORM - گرفتن خطای unique_violation پایگاه داده PostgreSQL هنگام save()
من یک تابع در یک سرویس دارم که نیاز دارد مقدار یک شیء جدید یا موجود در پایگاه داده را بگیرد و آن را ذخیره کند.
مشکل این است که ویژگی name این شیء باید یکتا باشد.
میدانم که میتوانم فقط یک تابع .some() روی همهی اشیاء پایگاه داده ایجاد کنم تا بررسی کنم آیا میتوانم این مقدار جدید را وارد کنم، اما احتمالاً این کار بسیار بهینه نیست.
من میخواهم چیزی شبیه به این (در زیر) بسازم، اما هیچ ایدهای ندارم که قدم بعدی چیست:
const newObject = await this.repository
.save({
...newObjectDto,
})
.catch(err => {
if (err instanceof QueryFailedError) {
// some code for err checking to make
// sure i only catch the unique_violation
// error and then throw error
}
});
پاسخ شماره ۱
کد خطا برای unique_violation 23505 است. شما میتوانید فهرست کامل کدهای خطایی که PostgreSQL برمیگرداند را اینجا بررسی کنید.
برای گرفتن نقض محدودیت یکتا، میتوانید این کار را انجام دهید:
try {
const newObject = await this.repository
.save({
...newObjectDto,
})
}
catch(err) {
if (err instanceof QueryFailedError) {
if(err.code === '23505') {
console.log(`Unique constraint ${err.constraint} failed`);
throw err;
}
}
}
