2017-10-06 114 views
0

我目前在一个项目中使用node-ews来通过node.js访问Exchange Web服务器。现在我遇到了一个奇怪的问题。要运行例如“CreateItem”的要求,它可以是一个E-Mail或预约比如,我给函数的参数类似于此node.js正确扩展json对象

var args = { 
    "attributes" : { 
     "SendMeetingInvitations" : "SendToAllAndSaveCopy" 
    }, 
    "SavedItemFolderId": { 
     "DistinguishedFolderId": { 
      "attributes": { 
       "Id": "calendar" 
      } 
     } 
    }, 
    "Items" : { 
     "CalendarItem" : { 
      "Subject" : "", 
      "Body" : { 
       "attributes" : { 
       }, 
       "$value" : "" 
      }, 
      "ReminderIsSet" : "true", 
      "ReminderMinutesBeforeStart" : "30", 
      "Start" : "", 
      "End" : "", 
      "IsAllDayEvent" : "false", 
      "LegacyFreeBusyStatus" : "Busy", 
      "Location" : "" 
     } 
    } 
}; 

由于REST的API我一个JSON正在写将会收到类似主题,开始,结束等属性我最初去掉了那些出了JSON的,后来就定义它们像

args.Items.CalendarItem.Subject = req.body.Subject; 

奇怪的是这将使得节点EWS的内部验证失败,并告诉我该CalendarItem具有无效的子主题。如果我在主题als中初始参数中有一个空字符串,并稍后更改它将其设置为req.body.Subject,它的工作原理很好。

我的问题是这样的:如果我稍后添加属性,是否有所不同,如果是的话有没有办法做到这一点?因为如果不使用它们并为所有这些属性定义标准值,即使api不需要它们被发送,我也不认为它是在我的对象中拥有一堆空属性的最佳方式。

如果有人知道答案会很棒。希望我可以澄清的问题是什么

+0

可能有一种方法可以做到这一点,但是您没有发布如何做的代码,只有正在工作的代码。如果你有一个相对较新的nodejs和Chrome浏览器,你可以尝试和调试那部分代码。检查什么req.body.Subject是。你可以使用inspect和break来启动节点:'node --inspect --debug-brk。/ myscript.js'然后打开chrome并导航到'about:inspect',然后点击链接:'打开专用的DevTools for Node'应该把你带到你的代码的第一行。在有问题的代码附近,你可以添加一个'debugger;'语句,以便它暂停。 – HMR

+0

req.body.Subject是一个普通的字符串。有趣的是,它覆盖了args.Items.CalendarItem.Subject,但它不会存在args.Items.CalendarItem.Subject。今天我会尝试更多的检查。如果我发现了一些东西,但是现在我很无能 – Chris

+0

你可以尝试:'Subject:req.body.Subject || “”''也许'undefined'不允许 – HMR

回答

0

好吧,

,所以这个问题似乎是这样的。在内部,JSON“对象”似乎有一个基于变量定义顺序的顺序。在JavaScript中这是没有问题的。但是,当XML解析,这是最后定义的标签也将在XML的结束,所以如果你有

<someTag> 
    <variable2 /> 
    <variable3 /> 
    </someTag> 

,并添加变量1到您的JSON通过someTag.variable1 = X到底XML将看起来像这样的节点EWS

<someTag> 
    <variable2 /> 
    <variable3 /> 
    <variable1 >x</variable1> 
    </someTag> 

beeing解析后,现在不幸的是,交换网络服务器似乎是挑剔的XML标签的顺序。所以当你建立你的json时,一定要使用直接命令。稍后更改json的内容不会影响订单。