Files
competition-website/app/validate/index.js
WorkBuddy a303cf2d53 chore: 后端首次基线提交
运行必须源码:app/(controller/model/service/middleware/lib/utils/validate/router)、config/、database/(migrations/seeders/sql)、启动脚本、app/public/templates 模板。
已忽略运行非必须:node_modules/、logs/、run/、app/public 运行时上传数据、.env*、构建/缓存产物。
2026-08-17 12:25:42 +08:00

87 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use strict';
/**
* 统一输入校验规则集(基于 egg-validate / parameter)
*
* 对应各接口请求体的字段级校验。校验失败由控制器以
* `ctx.helper.error(400, '参数校验失败:' + validateErr.errors[0].message)`
* 统一封装为应用错误信封,与 admin 控制器既有模式保持一致。
*
* 规则说明:
* - type: 'string' + required: true + allowEmpty: false:字段必填且不可为空串/纯空白
* - trim: true:校验前去除首尾空白
* - min: 6:字符串最小长度(用于密码强度底线)
* - message:为每个校验项提供中文错误文案,parameter 会在 errors[] 中携带对应 message
*/
const required = (msg) => ({
type: 'string',
required: true,
allowEmpty: false,
trim: true,
message: { required: msg, empty: msg },
});
module.exports = {
// 选手登录:手机号 + 密码
login: {
phone: required('请输入手机号'),
password: required('请输入密码'),
},
// 管理员登录:用户名 + 密码
adminLogin: {
username: required('请输入管理员用户名'),
password: required('请输入密码'),
},
// 发送短信验证码:身份证号 + 图形验证码
sms: {
phone: required('请输入身份证号'),
captcha: required('请输入图形验证码'),
},
// 账号激活:身份证号 + 手机号 + 短信验证码 + 密码(>=6)
activate: {
id_number: required('请输入身份证号'),
phone: required('请输入手机号'),
smsCode: required('请输入短信验证码'),
password: {
type: 'string',
required: true,
allowEmpty: false,
trim: true,
min: 6,
message: {
required: '请输入密码',
empty: '请输入密码',
min: '密码长度不能少于 6 位',
},
},
},
// 忘记密码-发码:身份证号 + 图形验证码
forgotPassword: {
id_number: required('请输入身份证号'),
captcha: required('请输入图形验证码'),
},
// 重置密码:身份证号 + 短信验证码 + 密码(>=6)
resetPassword: {
id_number: required('请输入身份证号'),
smsCode: required('请输入短信验证码'),
password: {
type: 'string',
required: true,
allowEmpty: false,
trim: true,
min: 6,
message: {
required: '请输入密码',
empty: '请输入密码',
min: '密码长度不能少于 6 位',
},
},
},
};