共享后端和前端输入验证或模块



我想共享输入验证,因为:

  • 在前端的用户体验,立即告诉用户输入是否好/错误
  • 后端的安全性问题,即使用户绕过前端JavaScript,用户也无法与RESTFUL API混乱
  • 也在前端的JavaScript始终是浏览器解释的条件,不能被信任

在完整的JavaScript Web应用中共享输入验证的最佳方法是什么(FRONDEND:REECT,后端:Nodejs)?

我正在考虑的解决方案是使用我的所有JavaScript验证器创建一个验证器模块:

  • 如果在本地主机上,两个环境都使用此模块来验证输入。
  • 如果在生产/预播中,我的部署脚本在部署前将模块复制在前端和后端中。
  • 每次我尝试验证输入时,导入代码看起来都会像这样:const validator = process.env.ENV === 'local' ? require('../../validator') : require('/validator')

是否还有其他广泛接受的方法来执行此操作(我想这是一个非常普遍的问题,但我没有发现类似的问题)?如果没有,我的方法正确吗?

从答案和实现出口:

  • 实施起作用,是利用Fullstack JavaScript应用程序的好方法
  • 它创造了一些复杂性,您需要注意不要实现两个非常不同的环境(在客户端浏览器和nodejs后端)之间行为相同的库/JavaScript方法。因此,我不会在我的验证器中使用任何第三方库,只使用vanilla javascript(示例:不要在验证器中使用export关键字,而是使用module.exports = {},因为ES6 export在nodejs中不起作用)
  • 如果要避免生产中的错误,每次修改validator模块并在两个环境中测试时,您始终将在前端部署和后端部署(我添加了一个在部署前运行的脚本并在两个模块之间检查diff的脚本)
  • 因为它使我获得了很多时间,所以我现在也在我的应用中分享其他功能性编程
  • 意识到,这种使用您自己的模块的方式就像在前端和后端使用NPM模块一样(如果您认为这对社区没有用的话,那就不必在NPM注册表上发布它而繁琐)

使用验证作为模块是一个很好的做法,但是您应该考虑如果出于某种原因您需要/想将后端技术更改为不是事物而不是的事物JavaScript像节点。

如果您要实现它 - 您将在此模块上具有客户端和服务器的依赖性,并且您必须在验证验证时维护此模块的不同版本或部署客户端代码和服务器代码更改 - 这也会导致一定的复杂性。

通常,您会在前端进行简单的验证,而后端更复杂的验证

例如:验证是否在前端给正则拨号发送电子邮件,请发送一个简单的邮件以确认该电子邮件的存在

最新更新