仅使用方法名称的字符串调用对象的方法
Calling object's method with only the string of the method's name
我正在尝试使用表达式验证器构建一个 Node.js 应用程序,这将让我像这样验证正文中的请求参数 -
req.checkBody('email_id', 'Invalid email ID!').notEmpty().isEmail();
现在我正在尝试构建一个大的 JSON 配置文件,该文件将包含应用程序中每个路由的所有字段及其规则(这是函数名称,例如 isEmail()
)。我想写入一个中间件,该中间件拦截每个请求,找出路由,从 JSON 文件中获取字段及其验证规则,然后运行这些规则。配置文件如下所示 -
{
"VALIDATION_RULES": {
"/createUser": {
"RULES": {
"email_id": {
"message": "Invalid email ID!",
"rules": ["notEmpty","isEmail"]
}
}
}
}
}
我可以查看表达式验证器模块的导出以获取所有可用的验证函数名称。如果它们是独立的函数调用,我会看到如何仅使用其名称的字符串调用函数,如此处和此处所示。
如何选择规则(notEmpty
或isEmail
),它们是 JSON 中的字符串,将它们转换为函数并将它们链接到req.checkBody($field, $field.message)
?
您可以使用数组表示法来调用函数。
这应该有效
req.checkBody($field, $field.message)["notEmpty"]()
或
req.checkBody($field, $field.message)["notEmpty"].apply()
或
req.checkBody($field, $field.message)["notEmpty"].call()
只需使用包含方法名称的变量引用函数:
var fields = {
"email_id": {
"message": "Invalid email ID!",
"rules": ["notEmpty","isEmail"]
}
};
// ...
var keys = Object.keys(fields);
for (var i = 0, len = keys.length, field, rules; i < len; ++i) {
field = fields[keys[i]];
rules = field.rules;
var checker = req.checkBody(keys[i], field.message);
for (var f = 0, lenf = rules.length; f < lenf; ++f)
checker[rules[f]]();
}
相关文章:
- JQuery Deferred Ajax,将结果保存在调用对象中
- 无法从JavaScript中的函数调用对象属性
- 在Javascript中调用对象方法时不是函数类型错误
- 正在调用对象中设置的匿名函数,但未得到预期结果
- 为什么需要“this”来调用对象内部的函数
- 如何从onClick事件调用对象函数
- 是否可以在不加对象名称前缀的情况下调用对象的函数
- 对象-在定义对象之前先调用对象
- console.log表示,当我调用对象的任何成员时,对象都是未定义的
- 正在调用对象的方法
- console.log是否调用对象的toString方法
- Javascript”;无效的调用对象“;xml错误
- 如何在javascript中调用对象键(codecademy)
- 如果我丢失了调用对象,如何杀死 setInterval()/setTimout()
- 如何在对象生成器外部调用对象属性值
- JavaScript:动态调用对象内的函数
- 如何动态加载 JavaScript 对象或调用对象方法
- IE9 在 iframe 中打印 PDF 时出现“无效调用对象”
- 在方法调用对象之外访问变量而不使它们全局化(可能吗?
- Javascript - 在对象中调用对象的方法,给出错误:“对象没有方法getStartPoint”