NodeJS & сборка запроса Firebase - PullRequest
0 голосов
/ 05 апреля 2020

Добрый день, я сейчас изучаю свой путь через NodeJS и столкнулся с проблемой, которую не знаю, как решить. (Я довольно новичок как в Node, так и в Firebase.)

У меня есть коллекция записей в firebase, в которой есть записи, которые выглядят так:

{
    "id": "1zbRQwgo1uOGfjOZrtwO",
    "userId": "wCT1OU8xEkdPHHR4QFPN",
    "compId": "uH1Netp3kizZZaoBm57v",
    "roundId": 2,
    "scores": [
        7,
        7
    ],
    "total": 52
},

Изначально у меня был маршрут для / records / id /: id и отдельный для / records / centreId /: id и другой для / records / userId /: id et c, чтобы мой API мог предоставлять результаты на основе идентификатора или centreId или имени компа. Это работает, но, очевидно, не очень хорошо и означает много дублированного кода.

В настоящее время я пытаюсь переместить это на использование "req.query", чтобы я мог иметь один маршрут, который будет обрабатывать вещи на основе параметров запроса передается в запросе.

Я пытался сделать это с помощью оператора If

 if (req.query['userId']){
        query = dbConn.db.collection('entries').where('userId', '==', req.query.userId) 

      } else {
        query = dbConn.db.collection('entries');

      };

Какой вид работы, но не кажется, что это правильный способ сделать что-то, если я хочу искать несколько вещей, например. Записи для идентификатора пользователя и compID и, возможно, даже roundId одновременно могут привести к путанице блоков If.

Я думал, что операторы Switch могут быть подходящим способом, но это тоже не сработало.

Какой лучший способ сделать это, чтобы я отправлял в firebase, чтобы я мог получить 1-x число секций .where ()?

1 Ответ

1 голос
/ 05 апреля 2020

Запросы Cloud Firestore следуют шаблону компоновщика, что означает, что вы можете создавать их в несколько этапов.

Обычно это выглядит примерно так:

// Start with a CollectionReference as our query
Query query = dbConn.db.collection('entries') 

// Handle each condition
if (req.query['userId']) {
    query = query.where('userId', '==', req.query.userId) 
}
if (req.query['name']) {
    query = query.where('name', '==', req.query.name) 
}

Если каждое условие может быть обработано одинаково, вы также можете l oop по всем ключам в req.query вместо повторения if s:

Query query = dbConn.db.collection('entries') 

Object.keys(req.query).forEach((key) {
    query = query.where(key, '==', req.query[key]);
});

В приведенном выше коде, Я просто использую req.query, так как вы поделились этим. Возможно, вам нужно убедиться, что объект, который вы перебираете, имеет только параметры запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...