AdonisJS 仅在使用 ORM 时使用 api 捕获数据库插入错误
AdonisJS catch database insert errors with api-only while using ORM
有没有办法捕获数据库插入错误,即在 api-only 模式下使用 Adonis ORM 时的重复条目。
在下面的示例中,如果用户名重复,它只会发送 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")
}
}
Try & catch 就是您要找的。您也可以使用 global exceptions.
关于您的重复错误,您还应该使用 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;
}
有没有办法捕获数据库插入错误,即在 api-only 模式下使用 Adonis ORM 时的重复条目。
在下面的示例中,如果用户名重复,它只会发送 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")
}
}
Try & catch 就是您要找的。您也可以使用 global exceptions.
关于您的重复错误,您还应该使用 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;
}