如何从Lua脚本向节点js返回带有字符串键控键值对的表?

安库什·卡拉

我有一个lua脚本。我正在从node.js运行,我的脚本正在返回带有键值对的lua表,例如{'1':15,'2':35}。在节点中,我得到一个空数组。但是,如果我返回arrayName ['1']。它给了我适当的价值15。我在这里做错了什么。我正在使用node_redis客户端进行节点重做。下面给出了不同的文件。

Lua脚本-groupBy.lua

local db = "";
local table = "students";
local groupBy = "class";
local aggregate = "marks";

local a = {};
local marksGroupedByClass = {};
for i = 1, 4 do
    local dataArr = redis.call("hgetall", db..table..":"..i);
    local dataObj = {};
    for i = 1, #dataArr, 2 do
        dataObj[dataArr[i]] = dataArr[i+1];
    end
    if a[dataObj["class"]] then
        a[dataObj["class"]] = a[dataObj["class"]] + dataObj["marks"]
    else
        a[dataObj["class"]] = dataObj["marks"]
    end
end

return a['2'];      -- This returns proper value 35
-- return a;            This returns empty array to node

节点文件-luaExec.js

let fs = require('fs');
let redis  = require('redis');
let client = redis.createClient();

client.on("error", cb);

function cb(err) {
    console.log("Error " + err);
}

client.eval(fs.readFileSync('groupBy.lua'), 0, (err, replies) => {
    if(err) cb(err);
    console.log(replies);
})

client.quit();

我使用此脚本保存了数据-saveStudentData.lua

redis.call("hmset","students:1", "name", "A", "class", 1, "marks", 5 );
redis.call("hmset","students:2", "name", "B", "class", 1, "marks", 10 );
redis.call("hmset","students:3", "name", "C", "class", 2, "marks", 15 );
redis.call("hmset","students:4", "name", "D", "class", 2, "marks", 20 );
Itamar Haber

TL; DR,你做不到。

Redis不支持键值类型的响应(尽管有传言称将在协议RESP3的下一版本中对其进行更改)。

因此,从Lua(具有kv对的表)返回关联数组会导致您发现空数组。您需要做的是将其展平,例如:

...
local reply = {} for k, v in pairs(a) do
  table.insert(a, k)
  table.insert(a, v)
end

return reply

或者只是简单地准备a在前面的循环中展平。最后,您的客户将必须了解这种格式,并在需要时从中重组对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

搜索带有字符串的对象并返回匹配的键值

返回带有节点js的远程IP的字符串之间的区别

如何从节点JS API调用返回字符串

Dart json.encode返回带有键值且不带引号的json字符串

MS SQL:将带有键值对的分隔字符串转换为键为列名的表

如何使用jQuery向HTML字符串(带有嵌套标签)添加“ checked”属性,然后返回整个字符串?

如何从字符串创建lua表?

如何在具有JSON字符串的Java脚本对象中访问特定的键值对

如何将复杂的字符串转换为键值中带有“”的JSON?

如何在脚本中将带有特殊字符的字符串传递给shell命令?

如何用'-'解析字符串到节点js本地脚本?

如何使用带有TypeScript的字符串标识符引用外部定义的节点模块

带有可观察字符串数组的角垫表返回列标题错误

根据对象键值对返回字符串

节点JS加密符号返回空字符串

如何编写接收字符串消息并返回带有分页的字符串消息列表的函数

如何使用脚本从日志中解析带有空字符串的列

如何从带有混合变量/字符串文字参数的Bash脚本中mkdir或cp?

如何用带有谷歌脚本的字符串替换谷歌文档中的多行文本

带有变量的Google脚本字符串

带有列表的bash脚本字符串操作

从字符串中删除字符并返回带有已删除字符的新字符串

如何在Lua中打印联接的字符串表?

如何在Lua中创建字符串,表名

如何通过gets向C中输入一个带有空字符的字符串?

如何在 Java 中的此方法中返回带有填充空格的字符串

如何在 PHP 中从带有 preg_match_all 的字符串返回 JavaScript?

如何返回带有特定单词的字符串数组?

bash:如何从函数返回带有换行符的字符串?