AdonisJS仅在使用ORM时使用api捕获数据库插入错误

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

在仅api模式下使用Adonis ORM时,是否有方法捕获数据库插入错误,即重复条目

在下面的示例中,如果用户名是重复的,它只会发送一个500内部服务器错误,并将错误的完整html页面转储到客户端

即使我不知道错误是什么,我至少希望能够捕获错误并发送一个更有用的json对象,如

{错误:“无法插入用户”}

下面是一些示例代码

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;

}