标签: ajv

Webpack - 关键依赖:依赖的请求是表达式

request在裸线webpack项目中导入时,我收到三条警告消息.在GitHub(运行npm install和npm start)上可以找到重现该错误的最小示例.

Critical dependency: the request of a dependency is an expression

我怎么能摆脱这个警告?


更多信息:

Webpack尝试require静态解析调用以创建最小的包.当库使用在需要调用变量(如这些线路中require('' + 'nodent'))的WebPack不能静态地解决这些问题,并导入整个包.

我的理由是,这种动态导入在生产中是不可取的,代码最好保持无警告.这意味着我想要任何可以解决问题的解决方案.例如:

  1. 手动配置webpack以导入所需的库并防止发生警告.
  2. 将ajv文件添加到我的项目中以某种方式覆盖require调用.
  3. 升级我的库.hack.js有一个解决方案,使警告无声.但是,如果我想使用它,我必须等到它被释放,然后直到ajv-5.0.1-beta.3并har-validator发布后续更新.如果有办法强制request使用测试版har-validator,那将解决我的问题.
  4. 其他

request webpack ajv

54
推荐指数
4
解决办法
4万
查看次数

错误"自定义关键字定义无效:data.errors应该是布尔值"

我刚刚使用此命令创建了一个新的React应用程序:

create-react-app mysite.com
Run Code Online (Sandbox Code Playgroud)

安装后,当我尝试使用npm start和打开它时yarn start,我收到以下错误.

throw new Error('custom keyword definition is invalid: '  + this.errorsText(validateDefinition.errors));
      ^

Error: custom keyword definition is invalid: data.errors should be boolean
    at Ajv.addKeyword (/Users/myAccount/Documents/Dev/Projects/ReactJS/mysite.com/node_modules/ajv/lib/keyword.js:65:13)
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

reactjs ajv create-react-app

18
推荐指数
3
解决办法
2315
查看次数

带有类验证器的高级条件(可能)?

我有 TypeScript NestJS 项目。

我需要验证传入 API 的 DTO。它可以被描述为“创建项目”,其中我们有建筑类型(房屋、公寓、花园),并且根据该类型我们需要定义:

  • 房屋:楼层,包括房间
  • 公寓: 房间
  • 花园:什么都没有(这是一个“房间”)

房屋类型示例:

{
  type: HOUSE,
  floors: [
    {
      name: "1st floor",
      rooms: [
        {
          name: "bedroom"
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

平面类型示例:

{
  type: FLAT,
  rooms: [
    {
      name: "bedroom"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我过去在 的帮助下完成了这件事AJV,但现在当我们迁移到 NestJS 时,我们开始使用class-validator.

我的问题是,我是否可以在 中创建这些高级条件(例如,当类型为 FLAT 时,则仅期望 ROOMS,而不是 FLOORS)class-validator?

typescript ajv class-validator nestjs

11
推荐指数
1
解决办法
3万
查看次数

用于 json 对象的 NodeJS 验证库

我需要验证我的 NodeJS 应用程序中的某个对象。我已经使用了一个很棒的库express-validator,它工作得很好,但是现在我需要验证不同的对象,不仅是请求,而且就 express 验证器利用validator库而言,它又不支持字符串类型以外的类型。

我发现了不同的变体,如Jsonschema、Ajv

它们提供了很棒的功能,但我需要能够设置错误消息,而不仅仅是捕获异常或从返回对象中解析它。像那样

 var schema = {
    "id": "/SimplePerson",
    "type": "object",
    "properties": {
      "name": {"type": "string", "error": "A name should be provided"},
      "address": {"$ref": "/SimpleAddress"},
      "votes": {"type": "integer", "minimum": 1}
    }
  };
Run Code Online (Sandbox Code Playgroud)

所以我可以为每个属性设置错误消息。

是否有任何现有的解决方案来实现此功能?

可能的解决方案

我找到了一个很棒的库JSEN它提供了必要的功能。

validation json jsonschema node.js ajv

9
推荐指数
2
解决办法
1万
查看次数

基于数据的ajv条件模式验证

我想根据另一个字段中的数据为一个字段指定正则表达式模式.这可能吗?我已经尝试过switch和$ data,但不知道如何使用它们.例如,如果数据如下:

{
   "contacts":[
      {
         "mode":"Email",
         "contact":"john.doe@abc.com"
      },
      {
         "mode":"Phone",
         "contact":"111-555-1234"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

和schema看起来像:

"$schema":"http://json-schema.org/draft-04/schema#",
   "type":"object",
   "properties":{
      "Contacts":{
         "type":"array",
         "minItems":1,
         "items":{
            "type":"object",
            "properties":{
               "mode":{
                  "type":"string",
                  "enum":[
                     "Email",
                     "Phone"
                  ]
               },
               "contact":{
                  "type":"string",
                  "pattern":"?????"
               }
            },
            "required":[
               "mode",
               "contact"
            ]
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

如何根据模式中的数据设置联系模式,这样如果模式是电子邮件,它会验证联系人对电子邮件格式的正则表达式,如果模式是电话,它会验证联系人对电话格式的正则表达式?我有每个的正则表达式.我需要逻辑来选择其中一个.

schema json ajv

8
推荐指数
1
解决办法
4226
查看次数

使用 ajv json 模式验证器的用户友好错误消息

假设我有架构和 JSON:

JSON 架构:

const schema = {
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "required": [ "countries" ],
  "definitions": {
    "europeDef": {
      "type": "object",
      "required": ["type"],
      "properties": { "type": {"const": "europe"} }
    },
    "asiaDef": {
      "type": "object",
      "required": ["type"],
      "properties": { "type": {"const": "asia"} }
    }
  },
  "properties": {
    "countries": {
      "type": "array",
      "items": {
        "oneOf":[
          { "$ref": "#/definitions/europeDef" },
          { "$ref": "#/definitions/asiaDef"}
        ]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

JSON:

const data = {
  "countries":[
    {"type": "asia1"},
    {"type": "europe1"}
  ]
}
Run Code Online (Sandbox Code Playgroud)
const isValid …
Run Code Online (Sandbox Code Playgroud)

jsonschema json-schema-validator ajv

8
推荐指数
3
解决办法
6472
查看次数

AJV:没有带有密钥或参考“https://json-schema.org/draft-07/schema”的模式

我使用的是ajv 8.6.2

我有使用默认导出针对 Draft-07 进行验证的架构

当我使用Draft-09 导出时,我的所有架构都会出现此错误:

no schema with key or ref "https://json-schema.org/draft-07/schema"
Run Code Online (Sandbox Code Playgroud)

如果我使用这个,也会出现同样的错误:

no schema with key or ref "https://json-schema.org/draft-09/schema"
Run Code Online (Sandbox Code Playgroud)

似乎无法弄清楚这里发生了什么?

ajv

8
推荐指数
2
解决办法
3040
查看次数

类型错误:当我运行 npm run build 时,Ajv 不是构造函数

每次运行时我都会遇到错误npm run build

错误:

/node_modules/mini-css-extract-plugin/node_modules/schema-utils/dist/validate.js:66
const ajv = new Ajv({
            ^

TypeError: Ajv is not a constructor
    at Object.<anonymous> (/home/ts34mpr/website/client/node_modules/mini-css-extract-plugin/node_modules/schema-utils/dist/validate.js:66:13)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (/home/ts34mpr/website/client/node_modules/mini-css-extract-plugin/node_modules/schema-utils/dist/index.js:6:5)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
Run Code Online (Sandbox Code Playgroud)

请问有人知道解决办法或者可以帮忙吗!谢谢

javascript build npm reactjs ajv

8
推荐指数
1
解决办法
6765
查看次数

如何使用 ajv 验证空字符串数组?

我用 ajv 进行 json 验证。我需要验证字符串数组。我知道哪些元素可以放置在那里,所以我做了适当的“枚举”。但在某些情况下,枚举可以为空,数组也可以为空。这是简单的测试:

var schema = {
    "type":"array",
    "items" : {
        "type" : "string",
        "enum" : []
    }
}

var data = [];

var Ajv = require('./ajv-4.1.1.js');
var ajv = Ajv({
    allErrors : true
});
var validate = ajv.compile(schema);
var valid = validate(data);
if (!valid)
    console.log(validate.errors);
Run Code Online (Sandbox Code Playgroud)

结果我得到:

Error: schema is invalid:data.items.enum should NOT have less than 1 items, data.items should be array, data.items should match some schema in anyOf
Run Code Online (Sandbox Code Playgroud)

我可以将任何虚构的字符串添加到枚举数组中,但是是否可以以合法的方式验证这种情况?添加“minItems=0”限制没有帮助。

我不能使用空枚举真的是 json 模式草稿限制吗?

UPD:我希望在一般情况下验证代码:

var array = Object.keys(someObj); …
Run Code Online (Sandbox Code Playgroud)

arrays validation json jsonschema ajv

7
推荐指数
1
解决办法
2万
查看次数

如何选择与webpack捆绑在一起的node_modules dist flavor

问题:

在我将AJV.js升级到版本6.4之后,我的供应商包包括"uri-js"ESNEXT版本而不是ES5版本,这打破了IE11的兼容性.

分析:

我认为AJV通过require('uri-js')电话引用了uri-js,并且uri-js有两种形式:

/node_modules/uri-js/dist/:

  • ES5
  • esnext

出于某种原因,Webpack(V 4.8)使用'es5'将uri-js的'esnext'风格捆绑到我的vendor-bundle中.我找不到如何/在哪里指定我的首选构建目标.

这是我的webpack.config.js:

const path = require("path");
const webpack = require("webpack");
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = {
    entry: {
        app: './src/index.tsx'
    },
    output: {
        filename: "js/[name].bundle.js",
        path: __dirname + "/dist"
    },
    devtool: "source-map",
    resolve: {
        extensions: [".ts", ".tsx", ".js", ".jsx", ".json"]
    },
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                loader: "ts-loader"
            },
            {
                test: /\.less$/,
                use: ExtractTextPlugin.extract({
                    use: [{
                        loader: …
Run Code Online (Sandbox Code Playgroud)

javascript npm typescript webpack ajv

7
推荐指数
1
解决办法
624
查看次数