Доступ к атрибутам состояния fabri c из запроса getPrivateStateByRange - PullRequest
0 голосов
/ 17 января 2020

У меня следующая проблема. Я пытаюсь написать функцию цепочки кода, которая запрашивает мое личное хранилище данных и возвращает подмножество состояний на основе некоторых проверок атрибутов. Давайте возьмем пример fabcar и предположим, что состояния автомобилей в моей коллекции являются частными. Я хотел бы запросить все автомобили, которые удовлетворяют определенным условиям на основе их атрибутов. Поэтому я подумал, что смогу l oop пройти через состояния, аналогично функции queryAllCars, и затем получить доступ к полям после того, как я его проанализировал. Ниже приводится мой подход для другого варианта использования. Это всегда выдает "не могу прочитать цвет свойства неопределенного". Я не понимаю, как это может быть неопределенным. Без проверки свойств есть запись с соответствующими свойствами (цвет, марка, модель ...) в формате JSON.

async queryAllPrivateCarsWithSomeConditions(ctx) {
        const startKey = 'CAR0';
        const endKey = 'CAR999';

        const range = await ctx.stub.getPrivateDataByRange(startKey, endKey);

        const allResults = [];
        while (true) {
            const res = await range.iterator.next();

            if (res.value && res.value.value.toString()) {
                console.log(res.value.value.toString('utf8'));

                const Key = res.value.key;
                let car;
                let color;
                try {
                    car = JSON.parse(res.value.value.toString('utf8'));
                    color = CarRecord.color;
                    if(Color == "x"){
                      //whatever
                    }
                } catch (err) {
                    console.log(err);
                    Record = res.value.value.toString('utf8');
                }
                allResults.push({ Key, Record });
            }
            if (res.done) {
                console.log('end of data');
                await range.iterator.close();
                console.info(allResults);
                return JSON.stringify(allResults);
            }
        }
    }

Кажется, что возможно получить доступ к свойствам в случае одного запроса состояния, как в примере changeCarOwner, где я могу получить доступ к цвету объекта после анализа.

code

async changeCarOwner(ctx, carNumber, newOwner) {
        console.info('============= START : changeCarOwner ===========');

        const carAsBytes = await ctx.stub.getState(carNumber); // get the car from chaincode state
        if (!carAsBytes || carAsBytes.length === 0) {
            throw new Error(`${carNumber} does not exist`);
        }
        const car = JSON.parse(carAsBytes.toString());
        car.owner = newOwner;

        await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car)));
        console.info('============= END : changeCarOwner ===========');
    }

1 Ответ

1 голос
/ 22 января 2020

Кажется, что CarRecord действительно не определено в вашем коде. Попробуйте изменить color = CarRecord.color; на color = car.color;. Обратите внимание, что car, а не CarRecord инициализируется на одну строку раньше: car = JSON.parse(res.value.value.toString('utf8'));.

...