我目前在一個項目中使用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