验证Javascript中对象形状的简便方法

时间:2019-05-31 16:16:47

标签: javascript validation shapes

我想知道是否有一种简单的方法可以验证Javascript中对象的形状。

现在,我有一个函数可以验证端点对象的形状,如下所示:

function validateEndpointShape(endpoint: any, hasId: boolean): boolean 
{
return endpoint
&& (hasId ? typeof endpoint.id === 'string' : true)
&& typeof endpoint.name === 'string'
&& typeof endpoint.description === 'string'
&& typeof endpoint.url === 'string'
&& GenericApiEndpointMethods[endpoint.method] !== undefined
&& ApiEndpointTypes[endpoint.apiEndpointType] !== undefined
&& endpoint.group
&& typeof endpoint.group.groupPublicKey === 'string'
&& typeof endpoint.group.groupName === 'string'
&& typeof endpoint.reason === 'string'
&& typeof endpoint.isPublic === 'boolean'
&& typeof endpoint.isActive === 'boolean'
&& authTypes[endpoint.authType] !== undefined
&& Array.isArray(endpoint.parameters)
&& Array.isArray(endpoint.headers);
}

这可能会很麻烦和笨拙。而且我不想对我创建的每个对象都执行此操作。

当端点进入我们的云Firebase功能时,我们必须对其进行一系列验证,以便我们知道何时拒绝不良数据。端点的形状就是这些验证之一。

我尝试这样做:

Delete req.body.reason;
req.body[‘extraField’] = ‘xxx’;
Const endpoint: GenericApiEndpoint = req.body;
console.log(‘endpoint =‘, endpoint);

但是Javascript不在乎。它将接受没有理由(强制字段)和ExtraField(模型中不存在的字段)的端点,并将其分配给键入为GenericApiEndpoint的对象。端点无理由并带有extraField打印出来。

我也尝试过:

Const endpoint = <GenericApiEndpoint>req.body;

...但是Javascript也不在乎。

有人知道一种简单的方法来验证Javascript中对象的形状吗?

1 个答案:

答案 0 :(得分:1)

有很多方法可以验证数据,我想说的是,任何要保留数据并匹配特定模型的系统都需要某种形式的字段验证。 ORM通常会这样做,但您也可以使用以下库:

最重要的是,如果要验证对象以确保它们适合特定的形状(模型/模式),则必须事先定义该形状。