Ну, у меня есть свои функции, которые запрашивают firestore в nodejs, и я использую экспресс.Итак, у меня есть функция, которая возвращает пользователя по электронной почте, предоставленной от Android.
Функция в Android, которая передает письмо на nodejs
Функция в nodejs, котораязапрос в firestore, чтобы получить пользователя по электронной почте
Я использую эту функцию, чтобы войти в систему пользователя в моем приложении, и она работает нормально.Но проблема возникает, когда для удаления пользователя я использую функцию getUserByEmail, чтобы получить пользователя, которого мне нужно удалить.Я не понимаю почему, но когда я запрашиваю функцию getUserByEmail для функции удаления, она возвращает то же значение, что и при повторной регистрации.Я не знаю, нужно ли мне направлять свои функции на nodejs или отключать кеш.
Что бы это ни было, я не знаю, как это сделать, и если вы можете объяснить мне или вставить ссылку о лучших методах, чтобы установитьup express в js и облачных функциях Google это было бы очень полезно.
Это то, как я инициализирую приложение express на моем indexjs Несмотря на отключение кэша, оно не работает.Спасибо!
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const Firestore = require('@google-cloud/firestore');
//const service_account = require(getKeyFileName());
const express = require('express');
const body_parser = require('body-parser');
const cors = require('cors');
const router = express.Router();
let app = express();
app.use(cors({origin: true}));
app.use(body_parser.json());
app.use(body_parser.urlencoded({ extended: true }));
app.use((req, res, next) => {
res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
res.header('Expires', '-1');
res.header('Pragma', 'no-cache');
next();
});
const firestore = new Firestore({
projectId: getProyectId(),
keyFilename: getKeyFileName()
});
const collection_userRef = firestore.collection('users/');
let user_model = {
userName: "",
userId: "",
userScore: 0,
first_login: true,
section: "",
userEmail: ""
};
let user = null;
main();
// admin.initializeApp({
// credential: admin.credential.cert(service_account)
// });
function main() {
admin.initializeApp(functions.config().firebase);
userDao();
}
function userDao() {
getUserByEmail();
exports.getUserByEmail = functions.https.onRequest(app);
postUser();
exports.postUser = functions.https.onRequest(app);
getUsers();
exports.getUsers = functions.https.onRequest(app);
deleteUser();
exports.deleteUser = functions.https.onRequest(app);
}
function getUsers() {
app.get('', (req, res) => {
const users = [];
return new Promise((resolve, reject) => {
return collection_userRef.get().then(snapshot => {
snapshot.forEach(doc => {
console.log(doc.data());
users.push(doc.data());
});
resolve(users);
res.send(users);
return users;
}).catch(error => {
console.log(error.message);
reject(error);
});
});
});
}
//using post to put user and to update it
function postUser() {
app.post('/:user', (req, res) => {
user = req.body;
console.log(req.body);
user['userScore'] = parseInt(user.userScore);
//si el texto es true, entonces la comparacion da un true en boolean si no pues false
user['first_login'] = (user.first_login === 'true');
user['isSelected'] = (user.isSelected === 'true');
return new Promise((resolve, reject) => {
return collection_userRef.doc(user.userId).set(user).then(() => {
console.log("USER ID: " + user.userId);
res.send(user);
resolve(user);
return user;
}).catch(error => {
reject(error);
});
});
});
}
function deleteUser() {
app.delete('/:id', (req, res) => {
let idToDelete = req.params.id;
console.log("USER DELETED: " + idToDelete);
let message = {"message": "Usuario borrado!"};
return new Promise((resolve, reject) => {
return collection_userRef.doc(idToDelete).delete().then(() => {
console.log(message);
resolve(message);
res.send(message);
return message;
}).catch(error => {
console.log(error);
reject(error);
res.send(error.toString());
});
// return collection_userRef.where("userEmail", "==", email).get().then(querySnapshot => {
//
// querySnapshot.forEach(doc => {
//
// console.log("doc info: " + doc.get("userId"));
//
// user = {
// "userName": doc.get("userName"),
// "userId": doc.get("userId"),
// "userScore": doc.get("userScore"),
// "first_login": doc.get("first_login"),
// "section": doc.get("section"),
// "userEmail": doc.get("userEmail")
// };
//
// doc.ref.delete();
// });
//
//
// resolve(message);
// res.send(message);
// return message;
// }).catch(error => {
// console.log(error.message);
// reject(error);
// });
});
});
}
function getUserByEmail() {
app.get('/:email', (req, res) => {
let user_email = req.params.email;
console.log("USUARIO EMAIL: " + req.params.email);
return new Promise((resolve, reject) => {
return collection_userRef.where("userEmail", "==", user_email).get().then(snapshot => {
snapshot.forEach(doc => {
console.log("doc info: " + doc.get("userEmail"));
user = {
"userName": doc.get("userName"),
"userId": doc.get("userId"),
"userScore": doc.get("userScore"),
"first_login": doc.get("first_login"),
"section": doc.get("section"),
"userEmail": doc.get("userEmail")
};
});
//console.log("USUARIO: " + user.userName);
resolve(user);
return res.send(user);
}).catch(err => {
reject(err);
console.log(err.toString());
});
});
});
}
function getKeyFileName() {
return "./coprojedb_sdkfirebase_admin_key.json";
}
function getProyectId() {
return "coprojedb";
}
https://github.com/sergio-27/coproje_v2/blob/admin_view/src/main/java/ruiz/coproje/entities/entities_dao_imp/UserImpDAO.java
Было бы замечательно, если бы кто-нибудь мог объяснить мне, как я могу создать crud с узлом js, используя firestore в качестве базы данных и запрашивая у Androidк функциям, расположенным в index.js.Я имею в виду, что я создал некоторые функции, такие как получить, передать параметры, удалить пользователя и опубликовать его.Итак, у меня есть идея о том, как заставить это работать, но у меня нет ясного понимания, как организовать имя URL (/ myapi / deleteuser / object) с помощью Express.Другой вопрос, должен ли я использовать express () (или также названный app) или router () (названный router), чтобы развернуть функции crud с firestore?Я немного растерялся ...: (