如何在Angular中执行Hapi.js / Strongloop验证?

时间:2015-02-04 08:10:18

标签: angularjs node.js strongloop hapijs joi

我打算用Hapi.js / strongloop后端和angularjs前端创建一个应用程序。

由于两个BE框架都有某种模型验证(Joi for Hapi,以及Strongloop自己的验证),我认为在前端使用这些验证模式会很棒。

这有可能吗?如果是,我如何将joi / strongloop验证库迁移到客户端?

  • 修复了什么:我们将AngularJS用作前端。

  • 我们拥有:Joi中定义的数据验证shemas。

  • 我想做什么:使用AngularJS中的相同模式(不调用服务器上的实际方法)

目前我们需要调用REST方法(例如Create方法)来使用joi验证表单数据(或者两次写相同的验证)。 我们想要更改此设置,以便前端可以在不联系服务器的情况下验证表单数据。

有没有办法在AngularJS中使用joi NodeJS库? 如果不可能,那还有另一种解决方案吗?

2 个答案:

答案 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)

  1. 创建一个共享Joi的文件。
  2. ShareJoi.js(Joi目录中的示例)

    1. 将以下代码写入ShareJoi.js
    2. var Joi = require(' ./ lib / index.js'); window.Joi = Joi;

      1. 安装browserify

      2. 运行 browserify ShareJoi.js> bundle.js

      3. 就是这样,它已准备好在客户端使用它。

      4. 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>