【问题标题】:What is causing the error "Cannot set uncompiled validation rules without configuring a validator" in NodeJS?是什么导致 NodeJS 中出现“无法在不配置验证器的情况下设置未编译的验证规则”错误?
【发布时间】:2020-07-16 04:26:13
【问题描述】:

这是我目前所拥有的。

'use strict';

const Hapi = require("@hapi/hapi");
const Joi = require("@hapi/joi")

const server = new Hapi.Server({ host: "0.0.0.0", port: 80 });

server.route({
    method: "POST",
    path: "/board",
    options: {
        validate: {
            payload: {
                name: Joi.object({
                    name: Joi.string().min(1).max(15)
                })
            }
        }
    },
    handler: async (request, h) => {
        // do stuff
    }
});

server.start();

这会产生错误

Error: Cannot set uncompiled validation rules without configuring a validator
    at new module.exports (C:\Users\Fukatsumu\Desktop\projects\Textboard\node_modules\@hapi\hoek\lib\error.js:23:19)
    at Object.module.exports [as assert] (C:\Users\Fukatsumu\Desktop\projects\Textboard\node_modules\@hapi\hoek\lib\assert.js:20:11)
    at Object.exports.compile (C:\Users\Fukatsumu\Desktop\projects\Textboard\node_modules\@hapi\hapi\lib\validation.js:48:10)
    at module.exports.internals.Route._setupValidation (C:\Users\Fukatsumu\Desktop\projects\Textboard\node_modules\@hapi\hapi\lib\route.js:197:43)
    at new module.exports.internals.Route (C:\Users\Fukatsumu\Desktop\projects\Textboard\node_modules\@hapi\hapi\lib\route.js:122:14)
    at internals.Server._addRoute (C:\Users\Fukatsumu\Desktop\projects\Textboard\node_modules\@hapi\hapi\lib\server.js:498:23)
    at internals.Server.route (C:\Users\Fukatsumu\Desktop\projects\Textboard\node_modules\@hapi\hapi\lib\server.js:491:22)
    at Object.<anonymous> (C:\Users\Fukatsumu\Desktop\projects\Textboard\index.js:37:8)
    at Module._compile (internal/modules/cjs/loader.js:956:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11

我希望这可以验证请求,但它却产生了一条错误消息,其中很少有关于如何修复的详细信息。

【问题讨论】:

    标签: node.js hapijs joi


    【解决方案1】:

    应该是

    'use strict';
    
    const Hapi = require("@hapi/hapi");
    const Joi = require("@hapi/joi")
    
    const server = new Hapi.Server({ host: "0.0.0.0", port: 80 });
    
    server.route({
        method: "POST",
        path: "/board",
        options: {
            validate: {
                payload: Joi.object({
                        name: Joi.string().min(1).max(15)
                    })
            }
        },
        handler: async (request, h) => {
            // do stuff
        }
    });
    
    server.start();
    

    有效负载:Joi.object({ 名称:Joi.string().min(1).max(15) })

    【讨论】:

      【解决方案2】:

      On upgrading to Latest hapi,检查您的代码中的路由验证和 response.schema 设置,如果您传递的值必须编译(见上文,缺少 Joi.object() 作为典型情况),或者包装您的架构与 Joi.object() 或致电 server.validator(Joi)

      【讨论】:

      • 此 server.validator() 选项不需要结构更改,因此恕我直言应该是首选。谢谢@tk120404!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2021-04-08
      • 2016-05-01
      • 2019-06-02
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      相关资源
      最近更新 更多