DevGang
Авторизоваться

Crud-операции в NodeJS c Express и Firebase 

Создание, чтение, обновление и удаление - это то, что называется CRUD.
Операции CRUD присутствуют почти в каждом веб-приложении. В этом руководстве я объясню, как выполнять операции CRUD в Node JS и Firebase.
Я предполагаю, что у вас есть настроенный и готовый проект.

СОЗДАТЬ ОПЕРАЦИЮ:
Давайте создадим гипотетического пользователя, чтобы продемонстрировать, как создавать и сохранять данные в базе данных.

app.post('/create-user', (req, res) => {
    const {name, email, password, phoneno, location } = req.body;
    const auth = firebase.auth();
    auth.createUserWithEmailAndPassword(email, password)
        .then((user) => {
            firebase.firestore().collection("users").doc().set({
                "name": name,
                "email": email,
                "phoneno": phoneno,
                "location": location,
            })
            .then(() => {
                res.send('User created successfully');
            });
        })
        .catch(err => {
            res.send(err);
        });
});

В приведенном выше коде мы получаем информацию о пользователе, то есть имя, адрес электронной почты, пароль и местоположение, из тела запроса, затем мы вызываем метод аутентификации firebase и используем этот метод аутентификации для аутентификации профиля пользователя с использованием электронной почты и пароля пользователя.

.then((user) => {
            firebase.firestore().collection("users").doc().set({
                "name": name,
                "email": email,
                "phoneno": phoneno,
                "location": location,
            })
            .then(() => {
                res.send('User created successfully');
            });
        })

Затем мы вызываем экземпляр Cloud firestore и сохраняем пользовательские данные в документе. Метод «.set ()» перезаписывает существующий документ, если документ не существует, он создаст его с предоставленными данными.

Чтение:
мы создадим маршрут, по которому пользователь входит в систему;

app.post('/login', async(req, res) => {
    try {
        const {email, password} = req.body;
        await firebase.auth().signInWithEmailAndPassword(email, password)
        .then((user) => {
            firebase.firestore()
                .collection('customers')
                .where('email', '==', email)
                .get()
            .then((users) => {
                let value = users.docs[0].data();
                res.json(value);
            });
        });
    } catch (err) {
        return res.status(400).send({ message: err.message });
    }
});

Здесь мы вызываем метод аутентификации firebase для аутентификации данных, предоставленных в теле запроса, если данные аутентифицированы успешно, мы переходим к поиску пользовательского документа в нашем облачном хранилище, используя электронную почту пользователя.

.then((users) => {
                let value = users.docs[0].data();
                res.json(value);
            });

Затем мы вызываем метод docs для результата, возвращенного из запроса firebase, чтобы получить результат в виде списка, и выбираем первый документ (должен содержать только один документ) и возвращаем его.

НАЙТИ ОДИН ДОКУМЕНТ
Затем мы вызываем метод docs для результата, возвращенного из запроса firebase, чтобы получить результат в виде списка и выбрать первый документ (должен содержать только один документ) и возвращаем его.

app.get('/find-user', async(req, res) => {
    const {email} = req.body;
    await firebase.firestore()
        .collection('users')
        .where('email', '==', email)
        .get()
    .then((users) => {
        let value = users.docs[0].data();
        res.send(value);
    });
});

ФИЛЬТРОВАТЬ ДОКУМЕНТЫ ПО НЕСКОЛЬКИМ ПОЛЯМ

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

app.post('/find-user', async (req, res) => {
    let location = req.body.location;
    let query = await firebase.firestore()
        .collection('users')
        .where('location', '==', location);

        if(query != "") {
            query = await query.where('verified', '==', "true");
        }
        if(query != "") {
            query.where('status', '==', 'online')
            .get()
            .then(snapshots => {
                if(snapshots.empty) {
                return null;
                }
                let results = snapshots.docs.map(doc => doc.data());
                return res.json(results[0]);
            });
        }
});

Метод «.where» возвращает запрос коллекции, который мы сначала проверяем, чтобы увидеть, не является ли он пустым, если это не так, мы фильтруем по другим полям, затем перебираем результаты и возвращаем данные первого документа.

ОБНОВЛЕНИЕ:
мы будем использовать метод «.update» для обновления существующего документа в облачном хранилище. Работает только в том случае, если документ уже существует до вызова метода обновления.

app.post('/update-user', async(req, res) => {
    const {name, email, phoneno, location } = req.body;
    try{
        if(!req.body){
            return res
                .status(400)
                .send({ message : "Data to update can not be empty"});
        }
        await firebase.firestore().collection('users')
        .where('email', "==", email)
        .update({
            name : name,
            description : req.body.description,
            phoneno : phoneno,
            location : location,
        }).then((ref) => {
            res.json(ref.data());
        });
    }
    catch(err){res.status(500).send({ message : err.message || "Error Occurred while updating" });
    }
});

УДАЛЕНИЕ:

Операция удаления довольно проста, вызовите метод «.delete» для документа, который вы хотите удалить.

app.post('/delete-user', async(req, res) => {
    const {email} = req.body;
    await firebase.firestore()
    .collection('users')
    .where('email', "==", email)
    .delete()
    .then((ref) => {
        res.json(ref.data());
    });
});

УДАЛИТЬ ЗНАЧЕНИЕ ИЗ МАССИВА:

app.post('/delete-value', async(req, res) => {
    const {email, value} = req.body;
    try{
        await firebase.firestore().collection('users').doc(email).update({
            [value] : firebase.firestore.FieldValue.delete()
        });
        res.json('successful operation');
    }
    catch(err){res.status(500).send({ message : err.message || "Error Occurred while deleting value" });
    }
});

Источник:

#JavaScript #NodeJS
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В подарок 100$ на счет при регистрации

Получить