egg-yup
v0.0.3
Published
async validate plugin base on yup
Downloads
3
Readme
egg-yup
Base on yup
Install
$ npm i egg-yup --save
or
$ yarn add egg-yup
Usage
// {app_root}/config/plugin.js
exports.yup = {
enable: true,
package: 'egg-yup',
};
Configuration
// {app_root}/config/config.default.js
exports.yup = {
locale: 'zh-CN', // default null
locales: { // default {}
'zh-CN': {
number: {
min: '${path} 不能小于 {$min}'
}
}
},
options: { // ref: https://github.com/jquense/yup#mixedvalidatevalue-any-options-object-promiseany-validationerror
strict: false;
abortEarly: true;
stripUnknown: false;
recursive: true;
context: null;
},
onerror: (err, ctx) => { // default null
ctx.throw(422, 'Validation Failed', {
errors: err.errors,
});
},
};
see config/config.default.js for more detail.
Example
// app/controller/user.js#register
const { ctx, app: { yup } } = this;
await ctx.validate({
nickname: yup.string()
.required('nickname is required')
.matches(/^[a-z0-9]{4,12}$/, 'nickname invalid')
.test('uniqueNickname', 'nickname already taken', value => {
return new Promise(resolve => {
setTimeout(() => {
resolve(value === 'test');
}, 0);
});
}),
password: yup.string()
.required()
.matches(/^[a-z]{6,16}$/, 'password invalid'),
age: yup.number().min(18).max(80),
});
Api reference
app.yup
Original yup
app.setYupLocale(locale: string | object)
Language setting
// set by string
app.setYupLocale('mars');
// set by object
app.setYupLocale({
number: {
min: 'too min',
},
});
ctx.validate(rules: object[, values: object = null [, options: object = null]])
Async validate. In order to allow asynchronous custom validations all (or no) tests are run asynchronously. A consequence of this is that test execution order cannot be guaranteed. ref: yup-doc
rules
: validate rulesvalues
: validate data, defaultctx.request.body
options
: this will override theoptions
in the config.
ctx.validateSync(rules: object[, values: object = null [, options: object = null]])
Sync validate
rules
: validate rulesvalues
: validate data, defaultctx.request.body
options
: this will override theoptions
in the config.
Questions & Suggestions
Please open an issue here.