2017-10-06 109 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的內容不會影響訂單。