2017-04-06 106 views
1

我嘗試在aws lambda的幫助下在節點js端創建一個cookie。我已經嘗試過下面的鏈接來創建cookie,但我可以使用context.done或context.successed來設置cookie。用這個aproch cookie打印在瀏覽器上,你的代碼就會退出。我正在嘗試設置一個cookie然後執行其他功能。 使用導航節點js,您必須使用http.createClient或createServer來獲取http.serverResponse,但使用aws lambda您不能這樣做。我在使用AWS的節點js創建cookie時遇到了困難Lambda

AWS鏈接用AWS api gatewal和lambda創建cookie。我能夠實現這一點。 https://aws.amazon.com/blogs/compute/simply-serverless-using-aws-lambda-to-expose-custom-cookies-with-api-gateway/

編輯 添加代碼,我想要做的,

exports.handler = (event, context, callback) => { 
    // TODO implement 
    console.log("{'Cookie':event['Cookie']}"); 
    var date = new Date(); 

    // Get Unix milliseconds at current time plus 365 days 
    date.setTime(+ date + (365 * 86400000)); //24 \* 60 \* 60 \* 100 
    var cookieVal = Math.random().toString(36).substring(7); // Generate a random cookie string 

    var cookieString = "mycookie="+cookieVal+"; expires="+date.toGMTString()+";"; 
    var errorXml = '<?xml version="1.0" encoding="UTF-8"?><VAST version="3.0"><error>Ad Not Available</error></VAST>'; 
    console.log(event.params.header["Cookie"]); 

     if(event.params.header["Cookie"]){ 
      console.log(errorXml); 
      callback(null, "test"); 
     }else{ 
      console.log("setting cookie"); 

      callback(null, {errorXml,"Cookie":cookieString}); 
     } 

}; 

隨着我能夠設置Cookie,但我的O/P是XML,而我路過回調函數中的cookie(我認爲這是使用lambda在節點js中設置cookie的唯一方法,我可能是錯的)。 application/xml正在爲有效的xml創建問題。一旦設置了cookie,代碼就不會進入其他循環。在我的應用程序中,我可以檢查Cookie是否設置在標題中,並將其傳遞給某個變量。現在我在設置cookie時遇到了問題,並帶有回調。

回答

0

根據假設寫出這個答案。如果沒有幫助,請提供一些代碼以瞭解詳情。此外,您提供的Link中沒有任何進一步附加內容的確切代碼適用於我。

用這種方法,cookie會打印在瀏覽器上,您的代碼會退出。

我想你的函數在成功執行之前退出。

原因可能是:

超時:此原因可以通過日誌驗證[任務x秒後超時]

LAMBDA是異步:如果cookie被後打印callback和函數退出,其他函數可能有更多的執行時間,並且在其他人的執行完成之前調用回調函數。 這可以通過在每個其他函數中添加一個console.log("test data");來驗證它的執行情況。

什麼我想要做它的設置一個cookie,然後執行其他功能。

好了,如果你的cookie並不需要從「其他功能」的任何數據,這樣就可以實現的,但如果你調用context或任何callbacks外「等功能」,有機會,異步節點將執行context.done()第一。

我的建議:

情況1

如果您已經從those-- 一個嵌套函數和餅乾需要的數據你應該去承諾,這將確保數據返回併發布該cookie可以設置。 更多的承諾,可以發現:Here

var Promise = require('promise'); 
var promise = new Promise(function (resolve, reject) { 
get('http://www.google.com', function (err, res) { 
if (err) reject(err); 
else resolve(res); 
    }); 
}); 

案例2:

如果沒有依賴其他functions--

嘗試使用回調像 東西:

exports.handler = function(event, context, callback) { 
otherFunctions(){} 
callback(null, {"Cookie": cookieString}); 
} 
+0

用你的最後一個方法,我已經能夠設置cookie,但這個回調退出了e功能即出口處理程序。我是節點js的新手,可以將此cookie設置爲函數中的任何變量,並在函數執行後返回該值。 – user1858991

+0

出現,您在嵌套函數中執行可變執行時間,節點在執行完成之前返回回調。您可以將布爾值設置爲False,並在所有嵌套函數執行完畢後將其設置爲True。然後,使用IF Condition檢查布爾是否爲真,如果是,則返回回調。或者,學會在這些情況下使用承諾。肯定有幫助。 –

+0

使用布爾值爲您工作?或者你應用了別的東西。請告訴我們。 –

相關問題