在 Nodejs 中使用 Joi 验证 REST 参数
Validate REST parameters using Joi in Nodejs
我正在尝试使用 joi 包在 Hapi 节点服务器中验证我的 GET 请求。验证按预期正常工作。但是,如果没有传递参数,我正在努力寻找 return 错误的方法。目前,如果没有传递参数,它就会成功。还有办法修改发送的响应吗?
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();
查看https://github.com/hapijs/joi#anyrequired
joi.string().required()
你可以使用 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')
}
},
当指定none个查询参数时,返回如下响应:
{ 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 });
}
}
},
使用 Joi.object().when()
并检查参数是否存在,并相应地决定您是要将其设为可选还是必需。
不,你不能修改错误。您可以在 hapi failAction: {}
的服务器端处理它。 Joi 没有自定义错误功能。
我正在尝试使用 joi 包在 Hapi 节点服务器中验证我的 GET 请求。验证按预期正常工作。但是,如果没有传递参数,我正在努力寻找 return 错误的方法。目前,如果没有传递参数,它就会成功。还有办法修改发送的响应吗?
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();
查看https://github.com/hapijs/joi#anyrequired
joi.string().required()
你可以使用 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')
}
},
当指定none个查询参数时,返回如下响应:
{ 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 });
}
}
},
使用 Joi.object().when()
并检查参数是否存在,并相应地决定您是要将其设为可选还是必需。
不,你不能修改错误。您可以在 hapi failAction: {}
的服务器端处理它。 Joi 没有自定义错误功能。