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" });
}
});