Express в nodejs хранит кеш с облачными функциями - PullRequest
0 голосов
/ 13 ноября 2018

Ну, у меня есть свои функции, которые запрашивают 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?Я немного растерялся ...: (

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