Javascript 共享后端和前端输入验证或模块
我想共享输入验证,因为:Javascript 共享后端和前端输入验证或模块,javascript,node.js,reactjs,validation,Javascript,Node.js,Reactjs,Validation,我想共享输入验证,因为: 前端的用户体验,即时告知用户输入是否正确/错误 后端的安全问题,即使用户绕过了前端javascript,用户也无法处理RESTful API 此外,前端中的javascript始终取决于解释它的浏览器,因此不可信任 在完整的javascript web应用程序中共享输入验证的最佳方式是什么(前端:react,后端:nodejs) 我考虑的解决方案是创建一个验证器模块,将所有javascript验证器放在代码库的根目录下: 如果在本地主机上,两种环境都使用此模块验证
- 前端的用户体验,即时告知用户输入是否正确/错误
- 后端的安全问题,即使用户绕过了前端javascript,用户也无法处理RESTful API
- 此外,前端中的javascript始终取决于解释它的浏览器,因此不可信任
- 如果在本地主机上,两种环境都使用此模块验证输入
- 如果在生产/预处理中,部署脚本会在部署之前在前端和后端复制模块李>
- 每次尝试验证输入时,导入代码都是这样的:
const validator=process.env.env=='local'?require('../../validator'):require('/validator')
有没有其他被广泛接受的方法可以做到这一点(我想这是一个非常常见的问题,但我没有发现类似的问题)?如果不是,我的方法正确吗 通常,您会在前端进行简单的验证,在后端进行更复杂的验证
例如:用前端的正则表达式验证电子邮件,发送一个简单的邮件来确认电子邮件的存在< /p> < p>这是一个很好的实践,使用验证作为一个模块,但是你应该考虑如果某种原因,你会发生什么,你想要/想要将后端技术改变成不是JavaScript之类的东西。
如果您要实现它,那么客户机和服务器将依赖于此模块,并且您必须维护此模块的不同版本,或者在任何时候进行验证更改时部署客户机代码和服务器代码,这会导致一些复杂性,您也应该考虑到这一点.答案和实施要点:
- 实现工作正常,是利用fullstack javascript应用程序的好方法
- 这会造成一些复杂性,您需要小心不要实现在两个非常不同的环境(在客户端浏览器和nodejs后端)之间行为不同的库/javascript方法。因此,我不会在验证器中使用任何第三方库,只使用普通javascript(例如:不要在验证器中使用
关键字,而是使用export
,因为ES6module.exports={}
在nodejs中不起作用)export
- 如果您想避免生产中的bug,每次修改
模块并在这两种环境中进行测试时,您都应该在前端和后端部署(我添加了一个在部署之前运行的脚本,并检查两个模块之间的差异)验证程序
- 因为它让我获得了很多时间,我现在也在我的应用程序中分享了其他的函数式编程
- 意识到这种使用您自己的模块的方式与在前端和后端使用npm模块非常相似(如果您认为它对社区毫无用处,那么它比必须在npm注册表上发布它要简单得多)