我目前正在项目中使用node-ews通过node.js访问Exchange Web服务器。现在我遇到了一个奇怪的问题。例如,运行" CreateItem"请求,例如,可以是电子邮件或约会,我给函数的参数作为类似于此的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,我写的将接收像Subject,Start,End等属性。我最初从JSON中删除了那些,并且稍后会定义它们
args.Items.CalendarItem.Subject = req.body.Subject;
奇怪的是,这会使node-ews的内部验证失败,并告诉我CalendarItem有一个无效的Child Subject。如果我在初始args中留下Subject als一个空字符串,稍后更改它将其设置为req.body.Subject它可以正常工作。
我的问题是:如果我稍后添加属性,对象会有所不同吗?如果是,有没有办法做到这一点?因为我不认为它是在我的对象中拥有一堆空属性的最佳方法,如果它们没有被使用并为所有这些属性定义标准值,即使api不需要它们也是如此发送。
如果有人知道答案会很棒。希望我能澄清问题是什么
答案 0 :(得分:0)
确定,
所以问题似乎就是这个。在内部,JSON“对象”似乎具有基于定义变量的顺序的顺序。在JavaScript中这没有问题。但是当解析xml时,最后定义的标记也将位于xml的末尾,所以如果你有
<someTag>
<variable2 />
<variable3 />
</someTag>
你可以通过someTag.variable1 = x将variable1添加到你的json中,最后在node-ews解析之后xml将会是这样的
<someTag>
<variable2 />
<variable3 />
<variable1 >x</variable1>
</someTag>
现在很遗憾,交换网络服务器似乎对xml标签的顺序很挑剔。所以当你构建你的json时一定要使用直接命令。稍后更改json的内容不会影响订单。