前言:在我们的日常开发工作中,为了确保数据的安全性和完整性,我们需要对前端接收到的数据进行验证。本文将介绍如何在 Hapi 框架中使用 Joi 插件进行请求数据验证。
什么是 Hapi
Hapi 是一个流行的 Node.js Web 应用开发框架,它具有一些强大的特性,如路由配置、请求与响应处理、以及插件扩展等。同时,Hapi 还提供了一个非常强大的路由表,可让您更轻松地管理 API 的路由。
什么是 Joi
Joi 是一个 Node.js 模块,它提供了一种非常灵活、可扩展的数据验证机制,可用于验证数据的完整性和安全性。Joi 可以解析和验证请求数据、服务端渲染后的 HTML 模板等。Joi 可以自定义规则和错误消息,可以满足我们的各种验证需求。
Hapi 中使用 Joi
首先,我们需要先引入 Hapi 和 Joi 模块,并创建一个简单的 Hapi 服务器:
// www.javascriptcn.com code example
const Hapi = require('hapi');
const Joi = require('@hapi/joi');
const server = Hapi.server({
port: 3000,
host: 'localhost',
});
const init = async () => {
await server.start();
console.log(`Server running at: ${server.info.uri}`);
};
process.on('unhandledRejection', err => {
console.log(err);
process.exit(1);
});
init();接下来,我们可以在实际应用中使用 Joi 进行数据验证。
首先,我们可以使用 Joi.object 方法定义一个验证对象:
const schema = Joi.object({
username: Joi.string().alphanum().min(3).max(30).required(),
password: Joi.string().pattern(new RegExp('^[a-zA-Z0-9!@#\$%\^\&*\)\(+=._-]{3,200}$')),
});上述代码定义了一个对象,其中包含了两个属性 username 和 password,分别指定了相应的规则。username 的规则是字符串类型,只能包含字母和数字,且长度不能小于 3 并且不能大于 30;password 的规则是字符串类型,必须符合一个正则表达式,该正则表达式可以指定想要的所有规则。
接下来,在请求处理程序中,我们可以使用 Joi 对请求的数据进行验证:
// www.javascriptcn.com code example
server.route({
method: 'POST',
path: '/login',
handler: (request, h) => {
const { username, password } = request.payload;
const result = schema.validate({ username, password });
if (result.error) {
return h.response(result.error.details[0]).code(400);
}
return { message: 'login success' };
},
});上述代码首先解构了请求中所携带的 payload,然后使用 Joi 对 payload 进行验证,并根据返回结果决定是否返回错误响应。Joi 还可以自定义错误消息,以便产生更明确的错误提示。
总结
使用 Hapi 和 Joi 进行请求数据验证是一种非常方便和安全的方式,可以大大提高应用程序的健壮性和可靠性。在实际项目中,我们可以结合具体场景和需求,使用 Hapi 和 Joi 制定出更完善和具体的验证规则,从而保证数据的准确性和安全性,提升应用程序的用户体验和可靠性。
完整 Demo 地址: https://github.com/iawia002/hapi-demo
如有错误或者不足之处,请您指正。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/645782dc968c7c53b0a3084b