Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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
Javascript Redis ReJSON系统地向我返回两个错误:在非终端路径上缺少键,并且必须在根目录下创建新对象_Javascript_Node.js_Redis_Redisjson - Fatal编程技术网

Javascript Redis ReJSON系统地向我返回两个错误:在非终端路径上缺少键,并且必须在根目录下创建新对象

Javascript Redis ReJSON系统地向我返回两个错误:在非终端路径上缺少键,并且必须在根目录下创建新对象,javascript,node.js,redis,redisjson,Javascript,Node.js,Redis,Redisjson,第二个错误相对难以理解。 第一个更具挑战性 我尝试了不同的组合来克服这个错误,但没有任何改进。 我的控制台返回给我: //控制台日志>第一个承诺{ReplyError:ERR必须创建新对象 在根上创建 在parseError处(node_modules/redis parser/lib/parser.js:193:12) 在parseType(node_modules/redis parser/lib/parser.js:303:14)命令:“JSON.SET”,args:['jsonTest7

第二个错误相对难以理解。 第一个更具挑战性

我尝试了不同的组合来克服这个错误,但没有任何改进。 我的控制台返回给我:

//控制台日志>第一个承诺{ReplyError:ERR必须创建新对象 在根上创建 在parseError处(node_modules/redis parser/lib/parser.js:193:12) 在parseType(node_modules/redis parser/lib/parser.js:303:14)命令:“JSON.SET”,args:['jsonTest7', “.user.here.now”, “{.nestedValue”:“我是一个嵌套值”}'],代码:'ERR'}//console log>second promise//console log>jsonTest7响应: 空的

下面是我的snippet.js:

const redis=require("redis"); 
rejson = require('redis-rejson');
const {promisify} = require('util'); 

rejson(redis); /* important - this must come BEFORE creating the client */
let client= redis.createClient({
    port:6380,
    host:'localhost', 
});  

const setAsync = promisify(client.json_set).bind(client);
const getAsync = promisify(client.json_get).bind(client);
const existsAsync= promisify(client.exists).bind(client);
client.exists('jsonTest2', function(err, reply) {
    if (reply === 1) {
        return true
    } else {
        return false
    }
});

async function isExist(object){ 
    var isExist= await existsAsync(object).then(data=> data)
        .catch((err) => console.error(err)); 
    console.log("isExist: ", typeof isExist)
    if(isExist !== 1) { 
        console.log("creating object...")
        await setAsync(object, '.', '{"here":"something"}');
        console.log("object created: " + object)
    } 
}
async function myFunc(object, rootKey) { 
    console.log("then 1")
    await isExist(object)
    await setAsync(object,  ".user.here.now", '{".nestedValue": "I am a nested value"}')
                .catch((err) => console.error(err));
    console.log("then 2")
    const res = await getAsync(object,  '.user.here.now')
                .catch((err) => console.error(err)); 
    console.log(object + " response: ", res) 

}
myFunc("jsonTest7")
任何暗示都很好,
谢谢

第一个错误表示您正在尝试创建一个新文档-即RedisJSON密钥不存在-但只提供一个子文档(即“user.here.now”)。新的键必须设置为根('.')级别,如您当前的代码示例所示。

如果我理解清楚,您必须为每个对象重复,我认为这是非常有效的,希望有更有效的方法来实现这一点嘿,Itamar,好的,如果我在这条路上,很高兴,但我当前的示例返回我:
在非终端路径级别错误缺少键
,我尝试过谷歌搜索,但到目前为止还没有找到解决问题的方法,也许你有一个提示?在我的测试中,似乎我必须重申,在创建根之后,手动一个接一个地创建每个级别,但我想肯定有一个建筑功能来处理这个问题