Oli*_*ver 0 javascript validation unique node.js express
我需要使用快速验证器或其他技术(对此来说是新的,所以我需要检查某个字段是否是唯一的(在之前的帖子中没有相同的名称,因此在数据库中当前没有与此相同的其他名称)不知道最好的方法)在 Node.js 的端点内。
我当前的代码是:
MainRouter.post('/animals', [
check('name')
.isAlpha()
.notEmpty()
.withMessage("The name should contain only letters and should be unique."),
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).send({errors: errors.array()});
}
AnimalPost.postAnimal(req.body).then(message => {
return res.json(message);
}).catch((error) => {
return res.json(404, error);
});
});
Run Code Online (Sandbox Code Playgroud)
例如:当我发布一个新名称(例如“ChloeGiraffe”)时,它应该是唯一的,因为它当前不存在于数据库中,可能如下所示:
因此,ChloeGiraffe 已经过验证,可以发布了。否则,如果它已经存在,则会显示错误。
我不知道这是否重要,因为工作是在端点内完成的,但如果重要的话,我会将所有信息保存在 Excel 工作表中;我不使用 MangoDB。
POST 本身是有效的,它只是关于唯一性的验证/检查。
我怎样才能做到这一点?请让我知道是否有另一种所需的方法是我的,如果错误,我找不到与此相关的任何有用信息。非常感谢您!
使用custom()验证规则
check('name')
.isAlpha()
.notEmpty()
.withMessage("The name should contain only letters and should be unique.")
.custom(value => {
return AnimalPost.findOne({ where: {name: value} })
.then(() => {
return Promise.reject('Name already taken')
})
}),
Run Code Online (Sandbox Code Playgroud)
查找查询可以根据您的 ORM 进行更改,上面的查询是通过记住您使用了 sequeulize ORM 来编写的