在Nodejs中使用JoivalidationREST参数

我试图通过使用joi包在Hapi节点服务器中validation我的GET请求。 validation工作正常如预期。 但是我很努力地find一个方法来返回错误,如果没有parameter passing。 目前如果没有parameter passing成功。 还有一种方法来修改正在发送的响应?

var Hapi = require('hapi'); var Joi = require('joi'); var server = module.exports = new Hapi.Server(); server.connection({ host : process.env.HOST, port : 3000 }); server.route({ method: 'GET', path: '/test', config: { validate: { query: { a: Joi.string().regex(/[0-9a-f]{8}-[0-9a-f]{4}/), b: Joi.string(), c: Joi.string(), d: Joi.string(), e: Joi.string() } } }, handler: function(req, reply) { reply('i am a beautiful butterfly'); } }); server.start(); 

你可以使用object.or()来做到这一点:

 config: { validate: { query: Joi.object().keys({ a: Joi.string(), b: Joi.string(), c: Joi.string(), d: Joi.string(), e: Joi.string() }).or('a', 'b', 'c', 'd', 'e') } }, 

当没有指定任何查询参数时,将返回以下响应:

 { statusCode: 400, error: 'Bad Request', message: '"value" must contain at least one of [a, b, c, d, e]', validation: { source: 'query', keys: [ 'value' ] } } 

要修改响应,可以使用failAction()的自定义处理程序:

 config: { validate: { query: Joi.object().keys({ a: Joi.string(), b: Joi.string(), c: Joi.string(), d: Joi.string(), e: Joi.string() }).or('a', 'b', 'c', 'd', 'e'), failAction: function(request, reply, source, error) { return reply({ message: error.output.payload.message }); } } }, 

签出https://github.com/hapijs/joi#anyrequired

joi.string().required()

使用Joi.object().when()并检查参数是否存在,并相应地做出决定,使其成为可选或必需的。

不,你不能修改错误。 您可以在服务器端hapi failAction: {}处理它failAction: {} 。 Joi没有自定义错误function。