如何在Node.js / Javascript中较小的嵌套函数中使用函数的参数?

看板

我正在尝试为我的POST请求正文编写一个验证器函数。由于验证过程在整个项目中重复多次,因此我为此编写了一个函数,validate.js以便可以在其他地方重复使用它。

这是我在中的函数的代码validate.js,它以函数验证器作为参数,因此可以应用于req.body第3行:

module.exports = function (validator) {
    return function (req, res, next) {
        const { error } = validator(req.body); 
        if (error) return res.status(400).send(error.details[0].message);
        next();
    }
}

然后,我继续将此功能用作POST方法中的中间件,例如:

router.post('/', validate(validateUser), async (req, res) => {
    ...
});

validateUser功能如下所示:

function validateUser(user) {
    const schema = {
        name: Joi.string().min(5).max(50).required(),
        email: Joi.string().min(5).max(255).required().email(),
        password: Joi.string().min(5).max(255).required(),
        class: Joi.number().min(1900).max(maxYear).required(),
        major: Joi.string().min(5).max(255).required(),
    };

    return Joi.validate(user, schema);
}

但是,这给了我一个似乎无法修复的“不是错误”功能。我怀疑这与validator返回函数范围之外的事实有关,因此validator内部基本上是一个未声明的变量。我该如何解决?谢谢!

这是错误:

{"level":"error","message":"validator is not a function validator is not a function", "stack":"TypeError: validator is not a function
at D:\\projects\\vikingreviews\\backend\\middleware\\validate.js:3:21
at newFn (D:\\projects\\vikingreviews\\backend\\node_modules\\express-async-errors\\index.js:16:20)
at Layer.handle [as handle_request] (D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\layer.js:95:5)
at next (D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\route.js:137:13)
at Route.dispatch (D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\route.js:112:3)
at newFn (D:\\projects\\vikingreviews\\backend\\node_modules\\express-async-errors\\index.js:16:20)
at Layer.handle [as handle_request] (D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\layer.js:95:5)
at D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\index.js:281:22
at Function.process_params (D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\index.js:335:12)
at next (D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\index.js:275:10)
at Function.handle (D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\index.js:174:3)
at router (D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\index.js:47:12) 
at newFn (D:\\projects\\vikingreviews\\backend\\node_modules\\express-async-errors\\index.js:16:20)
at Layer.handle [as handle_request] (D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\layer.js:95:5)
at trim_prefix (D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\index.js:317:13)
at D:\\projects\\vikingreviews\\backend\\node_modules\\express\\lib\\router\\index.js:284:7"}
伊尚克

你可以试试这个吗?

router.post('/', validate((user) => {
    const schema = {
        name: Joi.string().min(5).max(50).required(),
        email: Joi.string().min(5).max(255).required().email(),
        password: Joi.string().min(5).max(255).required(),
        class: Joi.number().min(1900).max(maxYear).required(),
        major: Joi.string().min(5).max(255).required(),
    };

    return Joi.validate(user, schema);
}), async (req, res) => {
    res.send('OK');
});

这是因为我怀疑看到错误消息,说明您未validateUser正确传递方法。这样,我们直接传递函数并确认错误是否是因为您传递的验证函数可能是错误的方式

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 VUE.js 方法中使用函数中的参数调用函数?

来自分类Dev

如何在node.js中的外部函数中使用内部结果

来自分类Dev

如何在node.js中的外部函数中使用内部结果

来自分类Dev

如何在Node.js中访问导出的“嵌套”函数-TypeError:不是函数

来自分类Dev

如何在Node JS中使用嵌套映射

来自分类Dev

如何在匿名函数中应用node.js REPL?

来自分类Dev

如何在node.js的同步函数中捕获错误?

来自分类Dev

如何在回调函数Node JS中打破for循环

来自分类Dev

如何在Node.JS的多行中写入函数的输出

来自分类Dev

如何在回调函数Node JS中打破for循环

来自分类Dev

如何在Node.js中处理异步函数

来自分类Dev

如何在Node.js中处理异步函数

来自分类Dev

如何在node.js中编码onclick函数?

来自分类Dev

如何在node.js中执行回调函数?

来自分类Dev

如何在node.js中编写可重用函数?

来自分类Dev

如何在Node JS中打印对象

来自分类Dev

如何在node.js中搜索?

来自分类Dev

如何在Node js中创建图像?

来自分类Dev

如何在Node JS中执行forloop

来自分类Dev

如何在 Node js 中添加会话

来自分类Dev

如何在Node.JS中从HTML调用函数到Javascript文件

来自分类Dev

我如何期望在Node.js中使用sinon,mocha和chai的特定参数调用函数?

来自分类Dev

如何从Node.js中的嵌套函数返回?

来自分类Dev

如何在不带.then函数的情况下使用node.js从promise中获取值

来自分类Dev

如何在Express Node JS中获取删除请求的参数

来自分类Dev

如何在 Node.js 中获取 url 作为参数?

来自分类Dev

如何在sequelize.js中嵌套SQL函数?

来自分类Dev

如何在Node.js中的GraphQL中使InputType灵活?

来自分类Dev

如何在Node.js中使用XHR API?

Related 相关文章

热门标签

归档