2016-03-07 21 views
0

在我的Node.js應用程序,我想打一個REST調用到SharePoint 2013年這是Node.js的代碼如何從node.js中對SharePoint 2013進行其他調用?

function downloadData(res, key, success, fail) {  
    var opts = url.parse(key); 


    opts.method = 'GET'; 
    opts.headers = {"Accept":"application/json;odata=verbose","X-RequestDigest":"0x146E2BDC9A21FDA62E793A0FC9793A530A5C6688BE194FB051703C8529B01A16607931C77D26EE61FA360AD04526F476A052FAC9B3C9277A5463AC20A27C3543,07 Mar 2016 15:37:18 -0000"}; 
    opts.headers['Content-Type'] = 'application/json;odata=nometadata'; 

    var req = http.request(opts, function(response) { 
     var str = ''; 

     //another chunk of data has been recieved, so append it to `str` 
     response.on('data', function (chunk) { 
      str += chunk; 
     }); 

     //the whole response has been recieved, so we just print it out here 
     response.on('end', function() { 
      success(res, str, key); 
     }); 
    }) 

    //req.write(data); 
    req.end(); 
} 

我從客戶端的摘要值,我做了一個警告聲明,並複製它。我在一個示例url上試了一下,如果我粘貼到瀏覽器上,它會起作用。當我運行這個時,我得到401 unauthorized

有誰知道錯在哪裏?

感謝

回答

0

首先,X-RequestDigest Header用於驗證客戶端請求進行身份驗證。

假設您的SharePoint網站利用NTLM authentication(默認),你可以利用httpntlm package實現HTTP NTLM身份驗證流程,並允許進行HTTP請求,如下面所示:

var credentials = { 
    username: 'jdoe', 
    password: 'password', 
    domain: 'contoso' 
}; 
var webUrl = "http://contoso.intranet.com"; 
var fileUrl = "/Shared Documents/guide.docx"; 


httpntlm.get({ 
    url: webUrl + "/_api/web/getfilebyserverrelativeurl('" + fileUrl + "')/$value", 
    username: credentials.username, 
    password: credentials.password, 
    domain: credentials.domain 
}, function (err, res) { 
    if (err) console.log(err); 


    console.log(res.body); //print data 
}); 
+0

試過,但總是得到HTTP 401錯誤,甚至(嘗試所有可能的域名值,如'','.sharepoint.com' ...和用戶名像'',' @.onmicrosoft.com' .. )。 終於有更好的運氣,包'sp-request' https://www.npmjs.com/package/sp-request&基本認證與登錄/通行證(我會嘗試其他認證方式,以避免需要存儲密碼) –

相關問題