Node.js无法连接到Cloud Shell上的mongodb

时间:2018-07-25 09:47:36

标签: node.js mongodb google-app-engine google-cloud-platform microservices

我的MongoDB服务器托管在google-cloud VM上。我希望创建App Engine微服务。测试连通性,

我的server.js看起来像

const MongoClient = require('mongodb').MongoClient;
const test = require('assert');
// Connection url
const url = 'mongodb://testmongodb:27017';
// Database Name
const dbName = 'test';
// Connect using MongoClient
MongoClient.connect(url, { useNewUrlParser: true },function(err, client) {
if(err){console.log(err)}
else {console.log("Connected successfully")}
});

如果我通过另一个虚拟机连接,它可以完美工作。但是在尝试通过 Google Cloud Shell 执行(npm start)相同代码时不起作用。我收到错误

{ MongoNetworkError: failed to connect to server [testmongodb:27017] on first connect [MongoNetworkError: getaddrinfo ENOTFOUND testmongodb testmongodb:27017]
    at Pool.<anonymous> (/home/google/mng/node_modules/mongodb-core/lib/topologies/server.js:562:11)
    at emitOne (events.js:116:13)
    at Pool.emit (events.js:211:7)
    at Connection.<anonymous> (/home/google/mng/node_modules/mongodb-core/lib/connection/pool.js:316:12)
    at Object.onceWrapper (events.js:317:30)
    at emitTwo (events.js:126:13)
    at Connection.emit (events.js:214:7)
    at Socket.<anonymous> (/home/google/mng/node_modules/mongodb-core/lib/connection/connection.js:245:50)
    at Object.onceWrapper (events.js:315:30)
    at emitOne (events.js:116:13)
  name: 'MongoNetworkError',
  message: 'failed to connect to server [testmongodb:27017] on first connect [MongoNetworkError: getaddrinfo ENOTFOUND testmongodb testmongodb:27017]',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} }

部署服务[gcloud app deploy]时,我得到完全相同的错误

请帮助。

3 个答案:

答案 0 :(得分:1)

App Engine Standard确实支持使用与您使用的相同的库连接到MongoDB实例。 This example也适用于标准版和灵活版。

问题在于您的连接方式。您必须像这样创建URI:

BOOL

在您的代码中,您的位置如下:

let uri = `mongodb://${user}:${pass}@${host}:${port}`;

您在URI中丢失了用户名和密码(假设const url = 'mongodb://testmongodb:27017'; 是您的主机名)。

答案 1 :(得分:-1)

连接到同一台计算机上的服务器时,请使用mongodb:// localhost:27017。

答案 2 :(得分:-1)

谢谢大家的支持和解答。

似乎在我的app.yaml文件中需要做的更改。
env: standard不支持 mongodb 。你将不得不使用     env: flex在您的 yaml 文件中,将由gcloud app deploy app.yaml命令使用