【问题标题】:google cloud functions connect to mongodb谷歌云功能连接到mongodb
【发布时间】:2018-12-01 20:21:41
【问题描述】:

我正在尝试在我的谷歌云函数 HTTP 触发器中连接到 MongoDB。

'use strict';
const http = require('http');
const MongoClient = require('mongodb').MongoClient;
exports.weatherWebhook = (req, res) => {
  console.log(req.body);

  MongoClient.connect('string', (err, client) => {
    if (err) {
      console.log(err)
    } else {
      db = client.db('chatbot')
      db.collection('chatbot_params').save({ "loanType": "123", "loanAmount": "90000", "duration": "5 years", "userSession": "test-1234" }, (err, result) => {
        if (err) {
          console.log(err)
          res.json({ "status": "err" })
        } else {
          res.json({ "status": "saved" })
        }
      })
    }
  })
} 

但是当我运行程序时,我得到一个错误提示。

ReferenceError: db is not defined at MongoClient.connect
(/user_code/index.js:14:16) at result
(/user_code/node_modules/mongodb/lib/utils.js:414:17) at
executeCallback (/user_code/node_modules/mongodb/lib/utils.js:406:9)
at /user_code/node_modules/mongodb/lib/mongo_client.js:272:5 at
connectCallback
(/user_code/node_modules/mongodb/lib/mongo_client.js:946:5) at
/user_code/node_modules/mongodb/lib/mongo_client.js:816:13 at
_combinedTickCallback (internal/process/next_tick.js:73:7) at process._tickDomainCallback (internal/process/next_tick.js:128:9)

这是为什么呢?我在其他应用程序(不是云功能)中实现了相同的代码。它似乎工作正常。

注意:我正在使用 mongo lab 来托管数据库

【问题讨论】:

  • 从 Cloud Functions 调用非 Google 服务需要您的项目采用付费计划。见stackoverflow.com/questions/49248637/…
  • 你的情况是@FrankvanPuffelen 的评论所描述的吗?如果不是,请定义你的 mongourl,即const mongoURL = 'mongodb://my-db-user:my-db-password@ds131531.mlab.com:31531/my-db-name'; 然后这一行应该是:MongoClient.connect(mongoURL, (err, client) => {...。然后这个小改动:let db = client.db('my-db-name') 还记得在你的 package.json 文件中包含 mongo:{ "name": "sample-http", "version": "0.0.1", "dependencies": { "mongodb": "^2.2.5" } } 我已经在 https://mlab.com 中测试过它,它没有任何问题。

标签: node.js mongodb google-cloud-platform google-cloud-functions serverless


【解决方案1】:

请为 MongoClient 指定 url,因为现在您只是将 'string' 作为 url 选项传递。看看下面

MongoClient.connect(url, function(err, client) { // provide mongo lab url 
  assert.equal(null, err);
  console.log("Connected successfully to server");

  const db = client.db(dbName);

  client.close();
});

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2021-01-25
    • 2019-12-08
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2017-11-14
    • 2021-10-05
    • 2020-05-11
    相关资源
    最近更新 更多