2016-03-30 7 views
3

Ich versuche, einen Benutzer auf meinem Azure-Konto mit Node.js-Technologie zu aktualisieren. Ich benutze Azure-Graphapi-Modul, um Anfrage zu senden und zu initialisieren. Folgendes ist mein Code.Aktualisieren von Benutzer mit Azure-Graphapi-Modul für Knoten js

var GraphAPI = require('azure-graphapi'); 
var graph = new GraphAPI(appSettings.oauthOptions.tenantId, appSettings.oauthOptions.clientId, appSettings.oauthOptions.clientSecret); 
var reqHeaders = { "content-type": "application/json" }; 
var reqBody = { 
      "department": "Sales", 
      "usageLocation": "US" 
     } 
    var person = { 
     userId: userID 
    }; 

graph.patch('users/f0eceb4f-xxxx-409a-xxxx-4e3exx4e3157', JSON.stringify(reqBody), reqHeaders, function (err, user) { 
     if (!err) { 
      console.log(user); 
     } 
     else { 
      console.log(err); 
     } 
    }); 

Auch nach Content-Type-Header bietet es mir einen Fehler, wie wirft "{[Fehler: Graph API Fehler:. 400 (Bad Request) Content-Type-Header-Wert fehlt] status: 400}"

Es wäre eine große Hilfe, wenn mir jemand helfen könnte.

Antwort

2

Es gibt mehrere Fehler in diesem Modul, das Sie verwenden. Um den Code zu arbeiten, sollten wir einige zusätzliche Änderungen im Quellcode GraphAPI.js in node_modules/auzre-graphapi tun:

beginnen mit Line 195, gibt es eine if Zustand stmt, scheint der Autor vergessen, den content zu definieren, die seit line 199 verwendet wird, und Nur wenn Sie den Post-Body zu buffer Objekt analysieren müssen, wird es den Content-Type-Header festlegen. So können wir schnell den Code als ändern:

if (data) { 
     if (Buffer.isBuffer(data)) { 
      options.headers['Content-Type'] = contentType; 
     } else if (!contentType) { 
      content = data; 
      if (typeof content === 'string') { 
       options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; 
       options.headers['Content-Length'] = content.length; 
      } else if (content !== null && typeof content === 'object') { 
       content = JSON.stringify(content); 
       options.headers['Content-Type'] = 'application/json'; 
       options.headers['Content-Length'] = content.length; 
      } 
     } else { 
      if (typeof contentType === 'string') { 
       options.headers['Content-Type'] = contentType; 
      } else if (contentType['Content-type'] !== null) { 
       options.headers['Content-Type'] = contentType['Content-type']; 
      } 
     } 
    } 

und dann den Header als Ihr Code: var reqHeaders = { "Content-type": "application/json" };

BTW, wie die update user document bezieht, wird es Antwort 204 ohne Antwort zurück, wenn der Erfolg, so dass Ihre Der Code wird bei Erfolg "undefined" gedruckt.

Update 4/19/2016

Wie der Autor das Paket keine Wartung mehr vorhanden, und er hat ein neues Paket graph-service für den universellen Graph APIs erstellt. Siehe https://github.com/fhellwig/azure-graphapi/issues/5#issuecomment-211392546