2015-06-10 84 views
1

我已經開發了谷歌Apps腳本,並沒有限制其發表的(每個人都可以看到它),我得到一個URL是這樣的:呼叫一個谷歌的Apps腳本從我的服務器的NodeJS

https://script.google.com/macros/s/<scriptid>/exec 

如果我運行這在瀏覽器中運行良好。

現在我想從我的節點js服務器調用這個。我使用:

request.post({url:url,form:{<my parameters>},function (err,httpResponse,body) 

獲取HttpResponse以302回覆,我已經在這個標題:

"CP="This is not a P3P policy! 
See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 

我相信,我需要打電話給我request.post之前做認證。但無法在文檔中的任何地方找到如何做到這一點。

+0

感謝您的答案,並糾正我可憐的英語寫作..最後,我能夠做到客戶端,付出了很多努力。我意識到我必須通過Ajax JSONP請求,因爲我的調用域仍然是http:// ,其中Google Apps腳本域名爲https://script.google.com。這可以解釋試圖做服務器端的失敗嗎? –

+0

在這裏我的臨時解決方案! –

+0

也需要學習stackoverflow .. :-) –

回答

2

終於得到了解決辦法(臨時):

,因爲它似乎是這個問題,從域方案的差異來(HTTP上調用側,HTTPS谷歌Apps腳本一側),解決發現的是要落實在呼叫客戶端該網頁,而不是服務器端,就像這樣:

var googleAppsScript = "https://script.google.com/macros/s/<myScriptId>/exec"; 

function scriptCB(result) { 
    if (result=="KO") displayError("Something went wrong in apps script"); 
    else displayMessage(result); 
} 
function callGAppsScript(docId,fields,cb) { 
    $.ajax({ 
     crossDomain: true, //REQUIRED !! as no scheme matched between my site and script.google.com 
     type:'POST', 
     url: googleAppsScript, 
     contentType: "application/json; charset=utf-8", 
     data: {prefix:'scriptCB',docId:docId,fields:JSON.stringify(fields)}, 
     dataType: "jsonp", //REQUIRED as we do Cross domain 
     jsonp:false, //disable adding ?callback= parameter 
     jsonpCallback:'scriptCB', //my callback once it is done 
     error: function(xhr,status,err) { 
      alert(err); 
     } 
    }); 

} 

谷歌Apps腳本被稱爲:

//script to replace some tagged fields in a given doc 
function doGet(e) { 
    var docId=e.parameter.docId; 
    var fields=JSON.parse(e.parameter.fields); 
    var doc = openDoc(docId); //my function to open the Google Document 
    var result="Document not found : "+docId; 
    if (doc) { 
    result="Doc "+doc.getName()+" open. Fields to replace: "+JSON.stringify(fields); 
    var _result = replaceFields(doc,fields); //my function to replace fields with new values brought by the external REST call 
    if (_result!="KO") result=_result; 
    } 
    return ContentService.createTextOutput(
    e.parameters.prefix + '(' + JSON.stringify(result) + ')') //this is necessary to get the jsonP callback working. 
    .setMimeType(ContentService.MimeType.JAVASCRIPT); //that's too. 
} 

function doPost(e) { 
    return doGet(e); 
} 

這個工程,在這個不是很好的JSONP技術的價格,等待我把我的服務器上的證書,並切換到https://

+0

最後,在將我的服務器切換到https後,沒有問題可以撥打穀歌應用腳​​本服務器端。所以我確認:協議不匹配避免調用googleApps腳本服務器端... –