mongoose 如何将MongoDB与Cloud Functions for Firebase一起使用?

a6b3iqyw  于 2023-06-30  发布在  Go
关注(0)|答案(3)|浏览(147)

我想使用Firebase和MongoDB的云函数。问题是我不知道如何将我的Mongo数据库与Cloud Functions连接。我的数据库是在matlab上部署的。我做了这个schema:

var mongoose = require('mongoose')
var Schema = mongoose.Schema

var patientSchema = new Schema({

    name: {
        type: String,
        required : true,
    },

    disease:{
        type: String,
        required : true, 
    },

    medication_provided: {
        type: String,
        required : true,
    },

    date : {
        type : Date,
    }
})

const patient = mongoose.model('patientInfo', patientSchema)
module.exports = patient

然后,我在项目index.js文件中要求我的模式,并导出一个名为getAllPatient的函数。

const patient = require('../Patient')
const functions = require('firebase-functions');
const mongoose = require('mongoose')

mongoose.connect('mongodb://patient:patient123@ds139869.mlab.com:39869/patient',{useMongoClient: true})
exports.getAllPatient = functions.https.onRequest((request, response) => {
    patient.find({}).then((data) => {
        response.send(data)
    })
})

但是给了我一个错误“错误:无法处理请求”

wydwbb8l

wydwbb8l1#

我最近遇到了这种类型的错误,发现firebase免费计划不允许从函数内部出站连接。如果你需要调用外部http/tcp连接,你需要在flame或blaze计划上。见下面的截图或见部分云功能->出站网络在此链接Firebase Pricing

cnwbcb6i

cnwbcb6i2#

尝试以下面链接中所示的类似方式设计云函数:
https://github.com/firebase/functions-samples/blob/master/authorized-https-endpoint/functions/index.js
很久以前我就试过mongoose,它工作得很好,但它很慢,因为对于每个新请求,它都会打开mongoose连接并为您提供数据。
希望这有帮助!!

h9vpoimq

h9vpoimq3#

备选方案:

2023年6月
TLDR; -使用Data API代替连接。link
这里是如何开启数据API并获取MONGO_DATAAPI_URLMONGO_DATAAPI_KEY

exports.getAllPatient = functions.https.onRequest((request, response) => {
  const data = {
    dataSource: dataSource,
    database: dbName,
    collection: collectionName,
  };

  const config = {
    method: "post",
    url: MONGO_DATAAPI_URL + "/action/find",
    headers: {
      "Content-Type": "application/json",
      "Access-Control-Request-Headers": "*",
      "api-key": MONGO_DATAAPI_KEY,
      Accept: "application/ejson",
    },
    data: JSON.stringify(data),
  };

  axios(config)
    .then(function (resp) {
      response.send(resp.data);
    })
    .catch(function (error) {
      response.status(400).send(JSON.stringify(error));
    });
});

说明

MongoDB允许一个名为Data API的服务从任何支持HTTPS的平台连接到MongoDB Atlas,包括

  • Web浏览器
  • Web服务器
  • CI/CD管道
    *无服务器和边缘计算环境
  • 移动的应用
  • 物联网设备

更多信息:https://www.mongodb.com/docs/atlas/api/data-api-resources/https://www.mongodb.com/docs/atlas/api/

相关问题