我正在尝试在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时遇到了问题。
答案 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});
}