AdonisJS仅在使用ORM时使用api捕获数据库插入错误
在仅api模式下使用Adonis ORM时,是否有方法捕获数据库插入错误,即重复条目 在下面的示例中,如果用户名是重复的,它只会发送一个500内部服务器错误,并将错误的完整html页面转储到客户端 即使我不知道错误是什么,我至少希望能够捕获错误并发送一个更有用的json对象,如AdonisJS仅在使用ORM时使用api捕获数据库插入错误,orm,try-catch,adonis.js,Orm,Try Catch,Adonis.js,在仅api模式下使用Adonis ORM时,是否有方法捕获数据库插入错误,即重复条目 在下面的示例中,如果用户名是重复的,它只会发送一个500内部服务器错误,并将错误的完整html页面转储到客户端 即使我不知道错误是什么,我至少希望能够捕获错误并发送一个更有用的json对象,如 {错误:“无法插入用户”} 下面是一些示例代码 const User = use('App/Models/User') class UserController { async register({ reque
{错误:“无法插入用户”}
下面是一些示例代码
const User = use('App/Models/User')
class UserController {
async register({ request }) {
const { username, email, password, first_name, last_name } = request.all()
const user = new User()
user.fill({
username,
email,
password,
first_name,
last_name
})
await user.save()
return user
}
}
部分解决:
我已经用下面的代码部分解决了这个问题,但我觉得必须有更好的/内置的方法来实现这一点
const User = use('App/Models/User')
class UserController {
async saveData(object, errorMessage){
try{
await object.save()
return object
}
catch(err) {
return {error:`${errorMessage}`}
}
}
async register({ request, response }) {
const { username, email, password, first_name, last_name } = request.all()
const user = new User()
user.fill({
username,
email,
password,
first_name,
last_name
})
return this.saveData(user, "Unable to save user")
}
}
Try&catch是您正在寻找的。您也可以使用 关于重复错误,还应使用以确保不会出现此错误 因此,在保存模型之前,请检查给定用户是否唯一(例如) 你会有这样的东西吗
async register({ request, response }) {
const { username, email, password, first_name, last_name } = request.all()
const rules = {
username: 'required|unqiue:username'
};
const validation = await validate(request.all(), rules);
if (validation.fails()) {
response.status(500).send(validation.messages());
}
const user = new User()
user.fill({
username,
email,
password,
first_name,
last_name
})
await user.save();
return user;
}