Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodeJs使用lambda AWS返回带引号的字符串而不是纯文本_Node.js_Amazon Web Services_Aws Lambda - Fatal编程技术网

Node.js nodeJs使用lambda AWS返回带引号的字符串而不是纯文本

Node.js nodeJs使用lambda AWS返回带引号的字符串而不是纯文本,node.js,amazon-web-services,aws-lambda,Node.js,Amazon Web Services,Aws Lambda,nodejs函数应返回text/csv,但应返回带有嵌入换行符的带引号的字符串,\n而不是实际换行符 对响应中接收到的头使用拦截器,它会正确地声明 内容类型:文本/csv 对于GET/tst/items/name HTTP/1.1等请求 nodejs代码段是 const Json2csvP = require('json2csv').Parser; const fields = ['f1','f2','f3']; var searchQ =['select * from names'];

nodejs函数应返回text/csv,但应返回带有嵌入换行符的带引号的字符串,\n而不是实际换行符

对响应中接收到的头使用拦截器,它会正确地声明 内容类型:文本/csv 对于GET/tst/items/name HTTP/1.1等请求 nodejs代码段是

 const Json2csvP = require('json2csv').Parser;
 const fields = ['f1','f2','f3'];
var searchQ =['select * from names'];
 await db.any(searchQ[0])
        .then(function(data) {
           const json2csvP = new Json2csvP({ fields, quote: '', eol: '\n' });
            console.log(csv);
            callback(null, (csv));
        })
对于AWS输出中的控制台响应,如下所示

"field1, field2 field3\n1  2  3"
而浏览器/REST工具中的调用者可以得到它

"field1, field2 field3\n1  2  3"
但我正在查看以下被调用方的csv格式

field1 field2 field3
1  2   3
请注意,没有引号,并且在没有html的纯文本中有一个真正的新行而不是\n字符。我尝试过使用.split,如下所示

 callback(null, (csv).split(/\n/g));
只在AWS响应结果中给出真正的换行符 [“字段1字段2字段3”, “1 2 3”]

但不是以所需的格式(两行中都没有引号)和调用者/浏览器/REST工具,它给出了下面这样的内容,没有换行符,带有引号和额外的不需要的字符,如下面所示

["field1 field2 field3", "1  2   3"]
来电者如何接收以下信息

field1 field2 field3
    1  2   3

我确实尝试了许多用于解析、csv和流等的nodejs模块,以获得所需的输出,但没有一个成功。输出端总是字符串化的

根据AWS文件, 这似乎是nodejs和Aws的联合限制

result–是一个可选参数,可用于提供 函数成功执行的结果。提供的结果必须是 与JSON.stringify兼容。如果提供了错误,则此参数为 忽略

java和Aws的结合不存在这种限制。

outputType–如果您计划同步调用Lambda函数 (使用RequestResponse调用类型),可以返回输出 使用任何受支持的数据类型创建函数的


一切都很好。AWS控制台正在打印
“field1,field2 field3\n1 2 3”
,可能是因为它是对字符串进行JSON编码的。文本表示背后的数据是您所想的(没有引号,带有“真实”的换行符)。在Node.js中尝试以下操作:
var fs=require('fs');var csv=“field1,field2 field3\n1 2 3”;fs.writeFileSync('out.csv',csv)
然后查看
out.csv
。它符合你的期望。一切都很好。谢谢Ahmed,还有更多关于这方面的内容,对于像REST客户机这样希望数据以所需格式显示的调用者来说,这是不好的。在浏览器中下载文件时不使用fs lib(请参见响应中的标题,它是text/csv),当我在记事本和记事本++中打开它时,输出是一个带引号的字符串,带有嵌入的换行符。在浏览器(chrome)中,页面显示带有嵌入字符的带引号的字符串。java或c#中的相同代码给出了所需的结果,但在nodejs中,上面的代码中似乎缺少了一些Rhing。我明白了,然后尝试
JSON.parse(theWeirdString)
,这应该会给您一个简单编码的字符串。是的,我尝试了JSON。Lambda函数将输出字符串作为JSON字符串返回,因为Lambda函数总是返回JSON字符串。这听起来像是在使用API网关,在这种情况下,a似乎是您应该使用的,因为响应JSON对象由API网关反序列化,响应对象的
body
字符串将返回给调用者,它看起来与您期望的完全一样。