我正在编写一个基本的谷歌云函数,它将从 MongoDB Atlas 查询一个 MongoDB 集群。我在 Google 控制台中编写,并且确定将 "mongodb": "^3.0.2" 添加到 package.json 文件中的依赖项中。
这是功能(为了安全起见,我在uri中替换了有效密码等):
/**
* Responds to any HTTP request that can provide a "message" field in the
body.
*
* @param {!Object} req Cloud Function request context.
* @param {!Object} res Cloud Function response context.
*/
exports.myPackage = (req, res) => {
var MongoClient = require('mongodb').MongoClient;
var uri = "mongodb+srv://<USERNAME>:<PASSWORD>@<CLUSTER-NAME>-vtbhs.mongodb.net/test";
MongoClient.connect(uri, function(err, client) {
if (err) {
console.log('err');
console.log(err);
} else {
const collection = client.db("test").collection("devices");
}
});
res.status(200).send('Success');
}
我确定驱动程序是最新的,并且我直接从 Atlas 文档中复制了大部分代码。我已将 Atlas 的所有 IP 列入白名单以进行测试。
每次函数运行时,我都会在连接回调中收到以下错误:
"{ Error: querySrv ESERVFAIL _mongodb._tcp.<CLUSTER-NAME>-vtbhs.mongodb.net
at errnoException (dns.js:28:10)
at QueryReqWrap.onresolve [as oncomplete] (dns.js:219:19)
code: 'ESERVFAIL',
errno: 'ESERVFAIL',
syscall: 'querySrv',
hostname: '_mongodb._tcp.<CLUSTER-NAME>-vtbhs.mongodb.net' }"
我之前也遇到过类似的错误:
URI does not have hostname, domain name and tld at module.exports
尽管自从我在 Mongo 中调整了密码(其中可能有一个非 html 编码的字符)后,这似乎不再弹出了。
提前感谢您的帮助!