gpt4 book ai didi

node.js - 使用nodejs在JSON redis中设置函数类型

转载 作者:IT王子 更新时间:2023-10-29 06:10:36 25 4
gpt4 key购买 nike

您好,我正在尝试使用 ioredis 在 redis 中存储 JSON。这个 JSON 也包含一个函数。我的 json 结构是这样的:

var object = {
site1: {
active: true,
config1:{
// Some config in JSON format
},
config2: {
// Some other config in JSON format
},
determineConfig: function(condition){
if(condition) {
return 'config1';
}
return 'config2';
}
}
}

我正在使用 IOredis 将此 json 存储在 redis 中:

redisClient.set(PLUGIN_CONFIG_REDIS_KEY, pluginData.pluginData, function (err, response) {
if (!err) {
redisClient.set("somekey", JSON.stringify(object), function (err, response) {
if (!err) {
res.json({message: response});
}
});
}
});

当我这样做时,determineConfig 键从 object 中被截断,因为如果类型是函数,JSON.stringify 会删除它。有什么方法可以将这个函数存储在 redis 中,并在我从 redis 取回数据后执行它。我不想将函数存储为字符串,然后使用 evalnew Function 进行计算。

最佳答案

JSON 是一种将任意数据对象编码为字符串的方法,可以在稍后将其解析回其原始对象。因此,JSON 仅编码“简单”数据类型:nulltruefalseNumber数组对象

JSON 不支持任何具有专门内部表示的数据类型,例如 Date、Stream 或 Buffer。

要查看实际效果,请尝试

 typeof JSON.parse(JSON.stringify(new Date)) // => string

由于它们的底层二进制表示无法编码为字符串,因此 JSON 不支持函数编码。

JSON.stringify({ f: () => {} }) // => {}

虽然您表示您不希望这样做,但实现您的目标的唯一方法是将您的函数序列化到它的源代码中(用字符串表示),如:

const determineConfig = function(condition){
if(condition) {
return 'config1';
}
return 'config2';
}

{
determineConfig: determineConfig.toString()
}

并且 exec 或以其他方式在接收端重新实例化该函数。

我建议不要这样做,因为 exec() 非常危险,因此已被弃用。

关于node.js - 使用nodejs在JSON redis中设置函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54181677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com