我目前在一个项目中使用node-ews通过node.js访问Exchange Web Server。现在我遇到了一个奇怪的问题。例如,为了运行"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将接收诸如主题、开始、结束等属性。
args.Items.CalendarItem.Subject = req.body.Subject;奇怪的是,这会导致CalendarItem的内部验证失败,并告诉我node-ews有一个无效的子主题。如果我在初始参数中将Subject als保留为空字符串,稍后将其更改为req.body.Subject,它就可以正常工作。
我的问题是:如果我稍后添加属性,对象是否会有所不同,如果是,是否有正确的方法?因为我不认为在我的对象中有一堆空属性是最好的方法,即使api不需要发送它们,也不能为所有空属性定义标准值。
如果有人知道答案就太好了。希望我能弄清楚问题出在哪里
发布于 2017-10-24 22:37:48
好的,
所以问题似乎是这样的。在内部,JSON“对象”似乎有一个基于变量定义顺序的顺序。在JavaScript中这是没有问题的。但是当解析xml时,最后定义的标记也将位于xml的末尾,因此如果您有
<someTag>
<variable2 />
<variable3 />
</someTag>并通过someTag.variable1 =x将variable1添加到您的json中,最后,经过node-ews解析后的xml如下所示
<someTag>
<variable2 />
<variable3 />
<variable1 >x</variable1>
</someTag>不幸的是,exchange web服务器似乎对xml标记的顺序过于挑剔。因此,当您构建json时,请确保使用直接订单。稍后更改json的内容不会影响顺序。
https://stackoverflow.com/questions/46600648
复制相似问题