AdonisJS ловит ошибки вставки базы данных с помощью api-only при использовании ORM - PullRequest
0 голосов
/ 02 декабря 2018

Есть ли способ отследить ошибки вставки базы данных, т.е. дублирующую запись, при использовании Adonis ORM в режиме только для API.

В приведенном ниже примере, если имя пользователя является дубликатом, оно просто отправляет внутреннюю ошибку сервера 500 и выдает клиенту полную html-страницу с ошибкой.

Даже если я неНе зная, что это за ошибка, я хотел бы, по крайней мере, иметь возможность ее перехватить и отправить более удобный объект json, такой как

{error: "Unable to insert user"}

Вот пример кода

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")

    }
}

1 Ответ

0 голосов
/ 27 декабря 2018

Try & catch - это то, что вы ищете.Вы также можете использовать глобальные исключения .

Что касается дублирующейся ошибки, вам также следует использовать AdonisJs Validator , чтобы убедиться, что вы не получите эти ошибки.

Поэтому, прежде чем сохранить свою модель, убедитесь, что данный пользователь уникален, например.

Таким образом, у вас будет что-то вроде этого

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;

}
...