是什么导致了 NodeJS 中的错误 "Cannot set uncompiled validation rules without configuring a validator"?
What is causing the error "Cannot set uncompiled validation rules without configuring a validator" in NodeJS?
这是我目前的情况。
'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
我原以为这会验证请求,但它却生成了一条错误消息,指出很少有关于如何修复的详细信息。
应该是
'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();
payload: Joi.object({
name: Joi.string().min(1).max(15)
})
On upgrading to Latest hapi,检查您的代码以进行路由验证和 response.schema 设置,以及您是否正在传递必须编译的值(请参阅上面缺少 Joi.object() 作为典型情况),要么用 Joi.object()
包装你的模式,要么调用 server.validator(Joi)
这是我目前的情况。
'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
我原以为这会验证请求,但它却生成了一条错误消息,指出很少有关于如何修复的详细信息。
应该是
'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();
payload: Joi.object({ name: Joi.string().min(1).max(15) })
On upgrading to Latest hapi,检查您的代码以进行路由验证和 response.schema 设置,以及您是否正在传递必须编译的值(请参阅上面缺少 Joi.object() 作为典型情况),要么用 Joi.object()
包装你的模式,要么调用 server.validator(Joi)