1

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

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

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

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

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

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

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

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

4

2 回答 2

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 将无法在客户端工作。

于 2015-02-08T00:57:46.680 回答
0
  1. 创建一个用于共享 Joi 的文件。

ShareJoi.js(Joi 目录中的示例)

  1. 在 ShareJoi.js 中编写以下代码

var Joi = require('./lib/index.js'); 窗口.Joi = Joi;

  1. 安装浏览器

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

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

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>

于 2015-07-27T19:48:55.887 回答