我打算用Hapi.js / strongloop后端和angularjs前端创建一个应用程序。
由于两个BE框架都有某种模型验证(Joi for Hapi,以及Strongloop自己的验证),我认为在前端使用这些验证模式会很棒。
这有可能吗?如果是,我如何将joi / strongloop验证库迁移到客户端?
修复了什么:我们将AngularJS用作前端。
我们拥有:Joi中定义的数据验证shemas。
我想做什么:使用AngularJS中的相同模式(不调用服务器上的实际方法)
目前我们需要调用REST方法(例如Create方法)来使用joi验证表单数据(或者两次写相同的验证)。 我们想要更改此设置,以便前端可以在不联系服务器的情况下验证表单数据。
有没有办法在AngularJS中使用joi NodeJS库? 如果不可能,那还有另一种解决方案吗?
答案 0 :(得分:0)
我没有使用过Strongloop,所以我会将我的评论限制在Joi。
Joi不是为客户端使用而构建的。即使您将所有代码放在那里,它也不会运行客户端。查看lib/index.js:
var Hoek = require('hoek');
var Any = require('./any');
...
var internals = {
alternatives: require('./alternatives'),
array: require('./array'),
...
};
所有这些require
语句都必须重写,以便它可以在客户端上运行。
Joi还有一些您可能想要或可能不想包含的外部依赖项。您可以查看package.json:
"dependencies": {
"hoek": "^2.2.x",
"topo": "1.x.x",
"isemail": "1.x.x",
"moment": "2.x.x"
},
所以,不,没有努力,Joi不会在客户端工作。
答案 1 :(得分:0)
ShareJoi.js(Joi目录中的示例)
var Joi = require(' ./ lib / index.js'); window.Joi = Joi;
安装browserify
运行 browserify ShareJoi.js> bundle.js
就是这样,它已准备好在客户端使用它。
Browserify.js和Joi.js
<script>
var schema = Joi.object().keys({
username: Joi.string().alphanum().min(3).max(30).required(),
password: Joi.string().regex(/[a-zA-Z0-9]{3,30}/),
access_token: [Joi.string(), Joi.number()],
birthyear: Joi.number().integer().min(1900).max(2013),
email: Joi.string().email()
}).with('username', 'birthyear').without('password', 'access_token');
Joi.validate({ username: 'abc', birthyear: 1794 }, schema, function (err, value) { console.log(err); console.log(value); }); //
</script>