我目前在一个项目中使用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不需要它们被发送,我也不认为它是在我的对象中拥有一堆空属性的最佳方式。
如果有人知道答案会很棒。希望我可以澄清的问题是什么
可能有一种方法可以做到这一点,但是您没有发布如何做的代码,只有正在工作的代码。如果你有一个相对较新的nodejs和Chrome浏览器,你可以尝试和调试那部分代码。检查什么req.body.Subject是。你可以使用inspect和break来启动节点:'node --inspect --debug-brk。/ myscript.js'然后打开chrome并导航到'about:inspect',然后点击链接:'打开专用的DevTools for Node'应该把你带到你的代码的第一行。在有问题的代码附近,你可以添加一个'debugger;'语句,以便它暂停。 – HMR
req.body.Subject是一个普通的字符串。有趣的是,它覆盖了args.Items.CalendarItem.Subject,但它不会存在args.Items.CalendarItem.Subject。今天我会尝试更多的检查。如果我发现了一些东西,但是现在我很无能 – Chris
你可以尝试:'Subject:req.body.Subject || “”''也许'undefined'不允许 – HMR