我的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]时,我得到完全相同的错误
请帮助。
答案 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
命令使用