validation后json数据服务器端

我使用javascript的nodejs作为服务器端,每次从客户端发帖,我会validation数据,确保每个键/值的数据结构存在,所以我做了下面的东西。

我不知道有没有更好的想法做到这一点,也许有很多可读性,
因为我把每个级别放在一个如果(..),不能像json / javascript对象那样更换行,所以它很长很难维护。

通常人们如何做到这一点?
build立一个正确的JSON对象结构,并与后期数据进行比较?

任何build议将不胜感激

正确的数据应该是这样的:

request.data = { "user": { "status": "int", "role": { "role": "int" }, "information": { "email": "text", "password": "text", "username": "text", "country": "text", ... a lot .... } }, } 

服务器端validation

  var validateRequest = 'true'; if (typeof request.data.user == 'undefined') { validateRequest = 'false'; } else { if (typeof request.data.user.status == 'undefined' || typeof request.data.user.role == 'undefined' || typeof request.data.user.information == 'undefined') { validateRequest = 'false'; } else { if (typeof request.data.user.role == 'undefined' || typeof request.data.user.information.email == 'undefined' ... ) { validateRequest = 'false'; } } } if (validateRequest != 'false') { // validate data type // use data crud } 

更新

我试图在服务器端设置一个正确的json结构,并与后期比较,我发现一些json diff 模块,但找不到如何更正用法只比较键

 var a = { "information": { "email": "text", "password": "text" } } var b = { "information": { // "email": "text", "password": "text" } } console.log(jsondiffpatch.diff(a, b)); I only know if data not different will get undefined if b remove "email" get this in console ?? ¨ information: ¨ email: ÿ 'text', 0, 0 ¦ ¼ ¼ if b email val = textt get this information: ¨ email: ÿ 'text', 'textt' ¦ ¼ ¼ 

我找不到方法确定使用jsondiffpatch后在我的问题,结果不同或价值不同,
所以我find另一个模块https://github.com/mirek/node-rus-diff它的工作原理是检查$ unset或$ set

 var diff = require('rus-diff').diff; var result = diff(a, b); if (typeof result.$unset != 'undefined') { console.log('different key'); } 

您可以利用jsondiffpatch模块来观察请求结构的差异。

jsondiffpatch模块获取diff函数:

 var diff = require('jsondiffpatch').diff; 

要validation请求,您可以将请求与模板进行比较。 例如,模板定义如下:

 var requestTemplate = { "user": { "status": "int", "role": { "role": "int" }, "information": { "email": "text", "password": "text", "username": "text", "country": "text", ... a lot .... } }, } 

要将请求与模板进行比较,请find两者之间的区别:

 var delta = diff(request.data, requestTemplate); 

search具有此签名值的任何属性的增量:

 'email': ['text', 0, 0] 

此签名表示该物业已被删除。 例如,上面的值表示request.data对象没有email属性。 没有这个属性意味着请求是无效的。

你可以定义一个函数来执行validation,如下所示:

 function validateRequest(template, requestData) { var delta = diff(requestData, template); // Search the delta for a deleted property. If found, invalidate the request. // If there is any key whose value looks like this: // 'email': ['text', 0, 0] // it means that the key has been removed and the request is invalid }