我想共享输入验证,因为:
- 前端用户体验,即时告诉用户输入是否正确
- 后端的安全问题,即使用户绕过前端javascript,用户也不能乱用RESTful API
- 此外,前端的 javascript 总是以浏览器解释它为条件,因此不可信
在完整的 javascript 网络应用程序(前端:react,后端:nodejs)中共享输入验证的最佳方式是什么?
我正在考虑的解决方案是在我的代码库的根目录创建一个包含我所有 javascript 验证器的验证器模块:
- 如果在本地主机上,两个环境都使用此模块来验证输入。
- 如果在生产/预生产中,我的部署脚本会在部署前在前端和后端复制模块。
- 每次我尝试验证输入时,导入代码看起来像这样:
const validator = process.env.ENV === 'local' ? require('../../validator') : 要求('/validator')
有没有其他被广泛接受的方法来做到这一点(我猜这是一个很常见的问题,但我没有发现类似的问题)?如果不是,我的方法是否正确?
最佳答案
答案和实现的要点:
- 实现有效,是利用全栈 javascript 应用程序的好方法
- 它会带来一些复杂性,您需要注意不要实现在两个截然不同的环境(在客户端浏览器和 nodejs 后端)之间表现不同的库/javascript 方法。因此,我不会在我的验证器中使用任何第三方库,而只会使用普通的 javascript(例如:不要在我的验证器中使用
export
关键字,而是使用module.exports = {}
,因为 ES6export
在 nodejs 中不起作用) - 如果您想避免生产中的错误,每次修改您的
validator
模块并在两个环境中进行测试时,您都应始终在前端和后端部署(我添加了一个在部署和运行之前运行的脚本检查两个模块之间的差异) - 因为它让我获得了很多时间,所以我现在也在我的应用程序中分享其他函数式编程
- 意识到这种使用您自己的模块的方式很像在前端和后端都使用 npm 模块(如果您认为它对社区没有用,那么它比必须在 npm 注册表上发布它要简单得多)
关于javascript - 共享后端和前端输入验证或模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55046707/