Какой стандартный способ публикации данных с использованием возвращаемого значения из других данных публикации в Node - Express / FaunaDB

Я переписываю свой проект и задаюсь вопросом, как мне опубликовать массив данных, в котором я повторно использую возвращаемое значение предыдущего почтового запроса в качестве их идентификатора. Вот приблизительная деталь структуры данных

  • Контрольный список А
  • [ChecklistItem 1, ChecklistItem 2, ChecklistItem 3] имеет свой идентификатор, установленный как Checklist A

Итак, моя текущая настройка: я отправляю контрольный список A, получаю возвращаемое значение от FaunaDB (который является его уникальным идентификатором), затем вставляю его в массив с помощью array.map, а затем повторно отправляю массив в FaunaDB.

Но я не знаю, как сохранить массив, поскольку параметр запроса уже израсходован. поэтому мне было интересно, как это сделать нормальным образом.

вот фрагмент кода функции

app.post('/checklists', (req,res) =>{
    const checklist = {
        dateCreated: Date.now(),
        user: Call(Fn('getUser'),'10049'),
        equipmentid: 'PM160'
    };

    const _checklistItems = [{
        componentid: 'AIRLK',
        conditionid: 'OK',
        equipmentid: 'PM160',
        remarks: 'test'
    }]

    const ckdoc = client.query(
        Crt('checklists',checklist))
        .then((ret) => {
            //would like to catch this ret and plug it into _checklistitems as its ID
            //then send the _checklistitems to faunaDB
        });
        res.send(ckdoc);
});

function Crt(collection,data){
    return Create(
        Collection(collection),
        {data}
    )
}

ОБНОВЛЕНИЕ после того, как @eskwayrd указал, что вы можете связать клиентские запросы в рамках одного экспресс-запроса js. Я связал другой клиентский запрос, в котором я сохраняю коллекцию элементов контрольного списка вместе со ссылкой на возврат из предыдущего запроса. хотя у меня были проблемы с отправкой его как массива, сохранение его через array.map все еще работало.

app.post('/checklists', async (req,res) =>{
    const checklist = {
        dateCreated: Date.now(),
        user: Call(Fn('getUser'),'10049'),
        equipmentid: 'PM160'
    };

    const _checklistItems = [{
        componentid: 'AIRLK',
        conditionid: 'OK',
        equipmentid: 'PM160',
        remarks: 'test'
    }]

    var _ref;

    console.log(checklist)
    await client.query(
        Crt('checklists',checklist)        
    )
    .then((ret) => {
            _ref = ret.ref
    })

    _checklistItems.map(item => {
        item.checklist = _ref
        console.log(item)
        client.query(
            Crt('checklist_items', item)
        )
    })

});

person suahdad    schedule 09.12.2020    source источник
comment
Возвращаемое значение из Create - это только что созданный документ, который включает поля ref, ts и data. Вы должны извлечь ref из ответа. Непонятно, что вы подразумеваете под повторной отправкой массива в FaunaDB. Что вы собираетесь делать с массивом?   -  person eskwayrd    schedule 09.12.2020
comment
спасибо .. за часть массива, я имел в виду сохранение массива как набора элементов ранее сохраненного контрольного списка   -  person suahdad    schedule 14.12.2020


Ответы (1)


Используя драйвер JavaScript Fauna, создаваемый вами клиентский объект можно использовать повторно; он не израсходован.

Как правило, вы можете связать зависимые запросы следующим образом:

client.query( ... your FQL query ... )
.then((result) => {
  const ref = result.ref
  client.query( ... another FQL query involving the ref ...)
  .then((result2) => {
    console.log(result2)
  })
})

Используя async и await, вы можете избежать вложенности, например:

;(async () => {
const result = await client.query( ... FQL query 1 ...)
  .then((res) => res)
  .catch((err) => console.log(`query 1 failed: ${err}`))

const ref = result.ref
const result2 = await client.query( ... FQL query 2 ...)
  .then((res) => res)
  .catch((err) => console.log(`query 2 failed: ${err}`))
console.log(result2)
})()

Обратите внимание, что оба примера, по сути, эквивалентны, а также демонстрируют, как извлечь значение из ответа.

person eskwayrd    schedule 09.12.2020
comment
потребовалось время, чтобы заставить его работать. но спасибо! Я обновлю сообщение о решении - person suahdad; 14.12.2020