我在使用AWS Lambda的节点js创建cookie时遇到了困难

时间:2017-04-06 08:02:57

标签: javascript node.js cookies lambda

我正在尝试在aws lambda的帮助下在节点js端创建一个cookie。我已尝试过以下链接来创建cookie,但我可以使用context.done或context.successed设置cookie。随着这个aproch cookie打印在浏览器上,你的代码就会退出。我正在尝试做它设置一个cookie,然后执行其他功能。 使用导航节点js,你必须使用http.createClient或createServer来获取http.serverResponse但是使用aws lambda你不能这样做。

使用AWS api gatewal和lambda创建cookie的AWS链接。我能够做到这一点。 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,代码就不会进入else循环。在我的应用程序中,我可以检查Cookie是否在标头中设置并将其传递给某个变量。现在我在使用回调设置cookie时遇到了问题。

1 个答案:

答案 0 :(得分:0)

根据假设写出这个答案。如果它没有帮助,请提供一些代码以获取详细信息。此外,您提供的Link中没有任何进一步添加的确切代码也适合我。

  

通过这种方法,cookie将打印在浏览器上,您的代码将退出。

我认为你的功能在成功执行之前退出。

原因可能是:

超时:可以通过日志验证此原因[任务在x秒后超时]

Lambda是异步的:如果在callback之后打印cookie并且函数退出,则其他函数可能会有更长的执行时间,并且在其他函数执行完成之前调用回调。 这可以通过在每个其他函数中添加console.log("test data");来跟踪其执行情况来验证。

  

我正在尝试设置一个cookie,然后执行其他功能。

好吧,如果您的Cookie不需要“其他功能”中的任何数据,这可以实现,但如果您拨打context或任何callbacks以外的“其他功能”,则可能是,异步Node首先执行context.done()

我的建议:

案例1

如果您有嵌套函数,并且cookie需要来自其中一个的数据 - 你应该去 promises ,这将确保返回数据并发布可以设置的cookie。 有关Promise的更多信息,请访问: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:

如果不依赖其他功能 -

尝试使用回调 类似的东西:

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