Tag: joi

如何用Joi来validation嵌套对象上的string

我的目标是允许一个可以包含任何东西的任意深度的嵌套对象。 在那个嵌套对象中,我只想对string执行额外的validation。 所以,对象可能是这样的: { "features": { "feature1": "value1", "feature2": false, "feature3": 321, "feature4": { "something": "else" }, "feature5": ["something", "more"] } 对于所有的string值我想执行一些额外的validation,但对于其他任何事情,我只是想接受它是有效的。 我只是部分在那里,需要一些帮助处理嵌套对象等。 这是我得到的: var providerSchema = Joi.object().keys({ features: Joi.object().pattern(/^/, Joi.alternatives() .when(Joi.ref('features'), { is: Joi.string(), then: validateBlacklist(['<', '>']), otherwise: Joi.any() })) }); function validateBlacklist(list) { let regex = new RegExp(`^(?:(?!${list.join('|')}).)*$`); return Joi.string().regex(regex) .options({language: { string: […]

如何扩展Error类?

这是我的代码: let errorBadRequest = new Error("Bad request"); res.statusCode = 400; errorBadRequest.errors = err.details.reduce(function(prev, current) { prev[current.path] = current.message; return prev; }, {}); throw errorBadRequest; 我想在错误实例中扩展error属性,但是tsc表示joi-utils.ts(21,23): error TS2339: Property 'errors' does not exist on type 'Error'. errors的结构是{fieldname: fieldmsg} ,这是根据我的joi请求模式来决定的。 如何解决从打字稿编译器的错误? 我想我需要声明一个接口并指定属性。

Joi.array()。includes不是函数错误

我正在使用Joivalidationvalidation我的API的有效载荷数据。 我做了一个这样的模式: 'use strict'; let mongoose = require('mongoose'); let Schema = mongoose.Schema; let tokenSchema = new Schema({ level : {type : Number}, tokenValues : [{ level : {type : Number}, amount : {type : Number} }] }); module.exports = mongoose.model('Tokens',tokenSchema,'tokens'); 我写了Joivalidation: validate: { payload: { level: Joi.number().required(), tokensValues: Joi.array().includes({ level : Joi.number().required(), amount : Joi.number().required() […]

如何validationExpress Nodejsstring中的body参数是否可以使用express-validation和joi转换为JSON

我正在创build一个接受post请求的函数。 发布请求还包含一个转换为string的JSON对象。 在后端,我需要validation这个string是否确实可以parsing成JSON,然后才能继续。 有路由function: var express = require('express'); var validate = require('express-validator'); var hotelController = require('../controllers/hotel-controller'); var hotelValidation = require('../validations/hotel-validation'); var router = express.Router(); router.route('/create') .post(validate(hotelValidation.createHotel), hotelController.create); 这是validation对象: var Joi = require('joi'); module.exports = { createHotel: { body: { //NEED TO CHECK IF THE BELOW FIELD //CAN BE CONVERTED TO JSON FROM STRING data: Joi.string().required() […]

从文件加载Joi架构

我想创build一个read多个文件的方法,每个文件都包含一个Joi模式的定义,然后load/push它们load/push送到可以从Node应用程序中调用的对象或数组中。 通常,这是在代码中内联完成的: var schema = Joi.object().keys({ a: Joi.string() }); 我应该如何在一个文件中定义每个Joi模式,以及如何加载它们,以便在主应用程序中实例化和使用它们?

如何整合与koa和joi的招摇?

我正在编写基于KOA框架的节点API。 为了validation,我更喜欢Joivalidation,并添加一个中间件。 现在我想整合Swagger 。 但我认为我编写了两次相同的代码部分(请求数据validation部分,一个在joivalidation中,另一个在swagger yaml文件中)。 请给我举一个例子,或者把swagger,koa和joi结合起来的最好方法。

如何检查依赖关系,如果JOI中的值可能为空?

我有四个用户input: reason1 , date1 , reason1 , date2 。 所有可能为空/未定义。 如果date1或reason1不为空,则现在必须使用date1和reason1 。 date2和reason2 。 所以原因取决于他们的date,反之亦然。 我到目前为止的尝试: var validationSchema = Joi.object.keys({ date1: Joi.date().allow('').allow(null); date2: Joi.date().allow('').allow(null); }) .with('reason1', 'date1') .with('reason2', 'date2') ; 不会工作,因为它永远是真的,由于.allow(null) 。 请记住,date可能为null ,如果原因也为null 。 所以我决定通过数组“破解”解决scheme:数组的长度可以是0(两个都是空),2(都包含数据)或1(只有一个包含数据) var data = req.body; data.checkReason1 = []; data.checkReason2 = []; (data.reason1 ? data.checkReason1.push(data.reason1) : null); (data.date1 ? data.checkReason1.push(data.date1) : […]

在与Joivalidation时划分未知的密钥

我正在使用Joivalidation服务器中的JavaScript对象。 模式如下所示: var schema = Joi.object().keys({ displayName: Joi.string().required(), email: Joi.string().email(), enabled: Joi.boolean().default(false, "Default as disabled") }).unknown(false); 上面的模式将报告一个错误,如果有一个未知的对象,这是预期的关键,但我想要的是剥去所有未知的默默,没有错误。 是否有可能做到?

如何使用joi(Node.js的validation框架)validation对象的数组?

我得到一个对象数组到后端,其中每个对象包含一个服务名称。 结构如下所示 [{"serviceName":"service1"}, {"serviceName":"service2"},..] 当我在后端得到数组时,我想validation数组中的每个对象都具有serviceName属性。 我已经写了下面的代码,但即使我传递有效的数组,我得到validation错误。 var Joi = require('joi'); var service = Joi.object().keys({ serviceName: Joi.string().required() }); var services = Joi.array().ordered(service); var test = Joi.validate([{serviceName:'service1'},{serviceName:'service2'}],services) 对于上面的代码,我总是得到消息的validation错误 "value" at position 1 fails because array must contain at most 1 items