Redis ReJSON систематически возвращает мне две ошибки: отсутствующий ключ на нетерминальном пути и новый объект должен быть создан в корне - PullRequest
0 голосов
/ 03 марта 2019

Вторая ошибка относительно проста для понимания.Первый немного сложнее.

Я пробовал разные комбинации, чтобы преодолеть эту ошибку, но улучшения не произошло.Моя консоль возвращает меня:

// журнал консоли> первое обещание {ReplyError: новые объекты ERR должны быть созданы в корне в parseError (node_modules / redis-parser / lib / parser.js: 193:12) at parseType (node_modules / redis-parser / lib / parser.js: 303: 14) команда: 'JSON.SET', args: ['jsonTest7', '.user.here.now', '{".nestedValue":" Я - вложенное значение "} '], код:' ERR '} // журнал консоли> второе обещание // журнал консоли> ответ jsonTest7: null

Вот мой 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")

Любой намек был бы великолепен, спасибо

1 Ответ

0 голосов
/ 03 марта 2019

Первая ошибка означает, что вы пытаетесь создать новый документ - т. Е. Ключ RedisJSON не существует - вы предоставляете только вложенный документ (т. Е. «.User.here.now»).Новые ключи должны быть установлены на корневой уровень ('.'), Как показано в текущем примере кода.

...