const validate = (routeRules, globalRules, options) => { return async (ctx, next) => { const rules = Object.assign({}, globalRules, routeRules); const { body, query, params } = ctx.request; // 获取所有参数并校验 const data = Object.assign({}, body, query, params); console.log(data) // 处理默认值 if (options.defaults) { for (const key in options.defaults) { if (data[key] === undefined) { data[key] = options.defaults[key]; } } } // 处理白名单 if (options.whitelist) { for (const key in data) { if (!options.whitelist.includes(key)) { delete data[key]; } } } // 处理是否允许为空 if (options.allowEmpty) { for (const key in rules) { if (!data.hasOwnProperty(key) && !rules[key].required) { data[key] = null; } } } try { ctx.verifyParams(rules,data); } catch (err) { console.error(err) return ctx.error(400, err.errors[0].field + ' ' + err.errors[0].message); } // 将处理后的参数存入ctx.state中,方便后续使用 ctx.state.data = data; await next(); }; };没写白名单怎么办这个函数
时间: 2024-02-14 09:06:52 浏览: 111
如果没有指定白名单,那么所有的参数都会被保留。在这种情况下,可以将以下代码段从函数中删除:
```javascript
if (options.whitelist) {
for (const key in data) {
if (!options.whitelist.includes(key)) {
delete data[key];
}
}
}
```
这样,所有的参数都会被保留,即使它们不在白名单中。
相关问题
这是我的valiadate函数的一部分const validate = (routeRules, globalRules, options) => { return async (ctx, next) => { const rules = Object.assign({}, globalRules, routeRules); const { body, query, params } = ctx.request; // 获取所有参数并校验 const data = Object.assign({}, body, query, params); 然后接下来是我的我想在const defValid = async (ctx, next) => {这样的函数里调用他,但是为什么调用不了
从你提供的代码来看,`defValid` 函数只是定义了一个异步函数,但并没有调用 `validate` 函数。如果你想在 `defValid` 函数中调用 `validate` 函数,你需要将 `validate` 函数作为参数传递给 `defValid` 函数,例如:
```
const validate = (routeRules, globalRules, options) => {
return async (ctx, next) => {
const rules = Object.assign({}, globalRules, routeRules);
const { body, query, params } = ctx.request;
// 获取所有参数并校验
const data = Object.assign({}, body, query, params);
// 验证规则
const errors = validateData(data, rules);
if (errors) {
ctx.throw(400, 'Bad Request', { errors });
}
await next();
};
};
const defValid = (validate) => {
return async (ctx, next) => {
// 是否全是数字
var reg = /^\d+$/;
if (reg.test(ctx.request.body.username)) {
await validate(rules1, globalRules, options)(ctx, next);
} else {
await validate(rules2, globalRules, options)(ctx, next);
}
};
};
// 调用方式
app.use(defValid(validate));
```
这样你就可以在 `defValid` 函数中调用 `validate` 函数,并传递需要的参数。
为啥我在deValid里的调用validate失败了const validate = (routeRules, globalRules, options) => { return async (ctx, next) => { const rules = Object.assign({}, globalRules, routeRules); const { body, query, params } = ctx.request; // 获取所有参数并校验 const data = Object.assign({}, body, query, params);const defValid = async (ctx, next) => { //是否全是数字 var reg = /^\d+$/; if(reg.test(ctx.request.body.username)){ loginPhoneValid; }else{ loginValid; } await next() }
根据你提供的代码,我看不出来具体的问题所在。但是,我可以给你一些调试的建议。你可以在这个函数内部打印出来一些参数的值,比如 `routeRules`、`globalRules`、`options`、`ctx`、`body`、`query`、`params`、`data` 等,看看它们的值是否正确。如果这些参数值都正确,那么你可以进一步检查 `loginValid` 和 `loginPhoneValid` 两个函数是否被正确定义和调用。希望这些建议能够帮到你。
阅读全文