使用 .lua 文件在 Aerospike Node.js 上注册 UDF
2019-1-24 9:39:34
收藏:0
阅读:98
评论:2
以下是我的问题。
我已经像下面这样注册模块
asclient.client.udfRegister('./lua/lm.lua', function (error) {
if (error) {
console.error('错误: %s [%d]', error.message, error.code)
}
});
执行完这段代码后,我会检查我的模块是否正确注册
aql> show modules
输出如下
| "lm.lua" | "824bf77bff0f8b35c4eacc5ddcee82b1802a0c63" | "LUA" |
因此,我确信模块已加载
然后,我尝试在lm.lua文件中应用一些函数
var ctoken = '0878d655bd4c438236b060b9b1c1d2af';
var key = new Key('namespace', 'set', 12345)
var udf = { module: 'lm', funcname: 'getlm', args: [ctoken]}
asquery.client.apply(key, udf, function (error, result) {
if (error) throw error
console.log(result);
});
lua文件的内容是
function getlm(stream, conv)
local function transformer(rec)
local touple = map()
touple["1"] = rec["1"]
touple["2"] = rec["2"]
touple["3"] = rec["3"]
return touple
end
return stream:map(transformer)
end
基本上我映射了AS中的所有字段,只是想返回一些结果以确保它正常工作,但由于某种原因总是返回
AerospikeError: /opt/aerospike/usr/udf/lua/lm.lua:17: attempt to call method 'map' (a nil value)
有没有什么方法可以转储这个.lua文件中的数据或者只是检查流数据是否与我预期的相同
谢谢。
点赞
用户1573115
如果您想要使用client.apply()方法来应用一个UDF到单个记录上,那么您需要将您的getlm函数重写为Record UDF。(正如@pgupta所指出的那样。)
例子:
demo.lua:
function getlm(rec)
local tuple = map()
tuple["1"] = rec["1"]
tuple["2"] = rec["2"]
tuple["3"] = rec["3"]
return tuple
end
apply.js:
const Aerospike = require('aerospike')
Aerospike
.connect()
.then(async client => {
await client.udfRegister('demo.lua').then(job => job.wait())
const key = new Aerospike.Key('test', 'test', 'test')
await client.put(key, { '1': 'foo', '2': 'bar', '3': 'fox' })
const udf = { module: 'demo', funcname: 'getlm'}
const result = await client.apply(key, udf)
console.info(result)
client.close()
})
.catch(error => {
console.error(error)
if (error.client) error.client.close()
})
$ node apply.js
{ '1': 'foo', '2': 'bar', '3': 'fox' }
2019-01-28 14:46:16
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我建议检查一下你的apply()调用。我认为应该是client.query.apply()。我没有看到UDF中显然有什么问题。我认为client.apply() 是针对操作单个记录并可以更改它们的recordUDFs。它们没有map()方法。对于你正在编写的流UDFs,query.apply()将支持map()。