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