【问题标题】:JOI email validationJOI 电子邮件验证
【发布时间】:2020-01-18 04:57:14
【问题描述】:

我使用 Joi 库作为我的 CRA 项目的独立验证器,但是在触发 email() 验证器时,我遇到了神秘错误

Uncaught Error: Built-in TLD list disabled

【问题讨论】:

    标签: hapijs joi


    【解决方案1】:

    如果您使用的是 joi 16.1.1,此版本中有一些更新,您可以在此处查看更多信息 docs。我想这会对你有所帮助

    email: Joi.string().email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })
    

    【讨论】:

      【解决方案2】:

      从 16.0.0 版本开始,joi 带有一个预构建的缩小版本,用于客户端开发。

      大概是为了节省空间,Joi 的浏览器版本不包含默认的 TLD 列表。

      (请参阅 Joi 存储库中的这些发行说明:https://github.com/hapijs/joi/issues/2037

      【讨论】:

        【解决方案3】:

        来自 Joi documentation

        默认情况下,TLD 必须是 IANA 注册表中列出的有效名称。要禁用验证,请将 tlds 设置为 false。要自定义 TLD 的验证方式,请设置以下选项之一:

        允许 - 之一:

        • true 以使用 IANA 注册 TLD 列表。这是默认设置 价值。
        • false 允许拒绝列表中未列出的任何 TLD(如果存在)。
        • 允许的 TLD 的集合或数组。不能一起用
          拒绝。

        禁用针对 IANA 接受列表的 TLD 验证:

        email: Joi.string().email({ tlds: { allow: false } });

        这应该会禁用验证并允许您接受任何 TLD,即使它没有 IANA 注册。

        【讨论】:

        • 如果我们将“allow”设置为 true,那么它会抛出错误 Uncaught Error: Built-in TLD list disabled
        • 即使我们只说电子邮件:Joi.string().email();然后它也抛出错误错误:内置 TLD 列表已禁用
        【解决方案4】:

        在 v16.0.0 的文档中:“浏览器构建不包括 TLD 电子邮件验证” 所以,我猜你必须在浏览器上将其设置为 false

        【讨论】:

          【解决方案5】:

          Joi 现在在其 package.json ('browser') 中有一个指令,它指示 Webpack 使用不包含 TLD 列表的精简版 Joi。

          要继续使用完整版的 Joi(具有有效的 TLD 验证),您需要覆盖 webpack 配置。

          首先是install Craco,它使您能够覆盖 CRA 的 webpack 配置。

          然后将以下内容添加到您的 craco.config.js:

          const path = require('path');
          
          module.exports = {
            webpack: {
              configure: {
                resolve: {
                  alias: {
                    // ignore the cut down browser distribution that 
                    // joi's package.json steers webpack to
                    joi: path.resolve(__dirname, 'node_modules/joi/lib/index.js'),
                  },
                },
              },
            },
          };
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-02-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-07-30
            • 2013-11-05
            相关资源
            最近更新 更多