nodejs中的Express可以保持云功能的高速缓存

时间:2018-11-13 20:57:55

标签: node.js express google-cloud-firestore google-cloud-functions

好吧,我有查询到nodejs中的firestore的函数,并且我正在使用express。 所以我有一个功能,可以通过android提供的电子邮件返回用户。

Function in android that pass the email to nodejs

Function in nodejs that query to firestore to get user by email

我使用此功能在我的应用程序上登录用户,并且运行正常。 但是问题出在何时删除用户时,我也使用功能getUserByEmail来获取必须删除的用户。我不明白为什么,但是当我在删除函数上请求函数getUserByEmail时,它返回的值就像我再次登录时一样。我不知道我是否必须在nodejs上路由我的函数或禁用缓存。

无论是什么我都不知道该怎么做,如果您能向我解释或粘贴有关在js和google cloud函数中设置express的最佳实践的链接,那将是一个很大的帮助。

This is how i initialize the app express on my 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

如果有人可以向我解释我如何使用firestore作为数据库并使用android请求到位于index.js的函数,如何使用node js创建一个Crud。我的意思是我已经创建了一些函数,例如get,get传递参数,删除用户并将其发布。所以我有一个关于如何使其工作的想法,但是我不清楚如何使用express来组织网址的名称(/ myapi / deleteuser / object)。另一个问题是,我是否使用express()(或也称为app)或router()(命名为router)来部署带有Firestore的Crud函数?我有点迷路了...:(

0 个答案:

没有答案