如何在AWS lambda中响应非拉丁字符?
10月12日更新:
这个问题现在已经解决了。 有关详细信息,请参阅aws论坛中的此帖 。
我写了一个nodejs函数,只是用一些汉字回复。 但它以错误的字符回应。
exports.handler = function(event, context) { context.succeed('Hello 世界!'); };
函数结果变成:
"Hello !"
当我写一个函数来parsing一些中文网站并检索他们的页面标题时,我遇到了这个问题。 我设法把它们转换成utf-8(我用这个请求),console.log(标题)正确显示这些汉字。 但context.succeed()的结果如上例所示。 在回应结果时,我应该怎样处理这些非拉丁字符呢?
来自AWS支持(2015年8月10日):
感谢您使用关于Lambda和UTF-8的问题向AWS Support寻求帮助。
目前我们正在研究这个问题,因为其他客户已经提请我们注意。 当这个问题得到解决或者我们可以解决这个问题的时候,还没有eta。
正如在AWS文档 – 编程模型(Node.js)中一样 :
指示Lambda函数执行,所有callback已成功完成。 这里是一般的语法:
context.succeed (Object result);
哪里
对象
result
– 提供函数执行的结果。 提供的结果必须是JSON.stringify
兼容的。 该参数是可选的。 你可以不带任何参数调用这个方法(succeed()
)或者传递一个null
值(succeed(null)
)。 如果AWS Lambda无法进行string化或遇到另一个错误,则会引发未处理的错误,并将X-Amz-Function-Error
响应头设置为“未处理”。
所以,你不能得到这样的结果:
Hello 世界!
因为,stringHello 世界!
将被编码为JSON。 那么,它会返回:
"Hello 世界!"
如果您在使用AWS Lambda Console的浏览器中看到以下内容:
"Hello !"
其实这是一个有效的JSON ,你只需要解码它,然后处理它。
尝试运行这个:
exports.handler = function (event, context) { var jsonStr = JSON.stringify('Hello 世界!'); console.log(jsonStr); console.log(JSON.parse(jsonStr)); context.succeed('Hello 世界!'); };
日志结果将是:
2015-08-07T12:49:54.888Z 12345678-90ab-cdef-1234-567890abcdef "Hello 世界!" 2015-08-07T12:49:54.889Z 12345678-90ab-cdef-1234-567890abcdef Hello 世界!
解码之后,你可以找回原来的string。
- AWS Elastic Beanstalk:我是否必须使用完整的“/ node_modules”和“/ bower_components”来部署我的应用程序,并编译sass和其他依赖项?
- 为什么nodemailer不能在AWS服务器-NodeJS上工作
- Amazon Elastic Beanstalk上的Node.js部署问题
- amqp.node不会检测到连接丢失
- 通过策略和证书即时创buildAWS IoT“事物”
- 使用RDS的AWS上的数据收集网页
- Amazon Web服务DynamoDB请求缓慢
- 在Node中本地使用dynamodb时,“无法从任何提供程序加载凭据”
- AWS s3文件以express的方式上传:上传与分段上传有什么区别?