Google app engine 我无法从app engine中托管的nodejs应用程序连接到gcloud sql
我在谷歌云上有一个托管节点应用程序和mysql。我尝试了所有可能的方法从节点连接mysql,但每次它抛出这个错误Google app engine 我无法从app engine中托管的nodejs应用程序连接到gcloud sql,google-app-engine,google-cloud-sql,google-appengine-node,Google App Engine,Google Cloud Sql,Google Appengine Node,我在谷歌云上有一个托管节点应用程序和mysql。我尝试了所有可能的方法从节点连接mysql,但每次它抛出这个错误 let池; const createPool=async()=>{ pool=wait mysql.createPool({ //主持人:“35.200.129.217”, socketPath:“/cloudsql/idylical-anvil-256103:asia-south1:database”, 用户:“abc@gmail.com", 密码:“通行证”, 数据库:“db”
let池;
const createPool=async()=>{
pool=wait mysql.createPool({
//主持人:“35.200.129.217”,
socketPath:“/cloudsql/idylical-anvil-256103:asia-south1:database”,
用户:“abc@gmail.com",
密码:“通行证”,
数据库:“db”
});
};
createPool();
app.get(“/getnews)”,(请求、响应)=>{
createPool.query('SELECT*FROM db.mydb',函数(err,result){
如果(错误)抛出新错误(错误)
响应。发送(结果);
})
});
错误:
2019-10-19 16:33:40 default[20191019t215943] Error: Error: connect ETIMEDOUT at Query._callback (/srv/index.js:42:20) at Query.Sequence.end (/srv/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24) at /srv/node_modules/mysql/lib/Pool.js:205:13 at Handshake.onConnect (/srv/node_modules/mysql/lib/Pool.js:58:9) at Handshake.<anonymous> (/srv/node_modules/mysql/lib/Connection.js:525:10) at Handshake._callback (/srv/node_modules/mysql/lib/Connection.js:491:16) at Handshake.Sequence.end (/srv/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24) at Protocol.handleNetworkError (/srv/node_modules/mysql/lib/protocol/Protocol.js:369:14) at PoolConnection.Connection._handleNetworkError (/srv/node_modules/mysql/lib/Connection.js:421:18) at PoolConnection.Connection._handleConnectTimeout (/srv/node_modules/mysql/lib/Connection.js:417:8)
2019-10-19 16:34:16 default[20191019t220300] "GET / HTTP/1.1" 304
2019-10-19 16:34:18 default[20191019t220300] Server listening on port 8081...
2019-10-19 16:34:18 default[20191019t220300] Database connection was refused.
2019-10-19 16:34:22 default[20191019t220300] "GET /getnews HTTP/1.1" 502
2019-10-19 16:34:22 default[20191019t220300] /srv/index.js:42
2019-10-19 16:34:22 default[20191019t220300] if (err) throw new Error(err)
2019-10-19 16:34:22 default[20191019t220300] ^
2019-10-19 16:34:22 default[20191019t220300]
2019-10-19 16:34:23 default[20191019t220300] Error: Error: connect ECONNREFUSED /cloudsql/idyllic-anvil-256103:asia-south1:database at Query._callback (/srv/index.js:42:20) at Query.Sequence.end (/srv/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24) at /srv/node_modules/mysql/lib/Pool.js:205:13 at Handshake.onConnect (/srv/node_modules/mysql/lib/Pool.js:58:9) at Handshake.<anonymous> (/srv/node_modules/mysql/lib/Connection.js:525:10) at Handshake._callback (/srv/node_modules/mysql/lib/Connection.js:491:16) at Handshake.Sequence.end (/srv/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24) at Protocol.handleNetworkError `enter code here`(/srv/node_modules/mysql/lib/protocol/Protocol.js:369:14) at PoolConnection.Connection._handleNetworkError (/srv/node_modules/mysql/lib/Connection.js:421:18) at Socket.emit (events.js:198:13)
2019-10-19 16:33:40默认值[20191019t215943]错误:错误:在查询时连接ETIMEDOUT。\在Query.Sequence.end(/srv/node\modules/mysql/lib/protocol/sequences/Sequence.js:83:24)在/srv/node\modules/mysql/lib/Pool.js:205:13在Handshake.onConnect(/srv/node\modules/mysql/lib/Pool.js:58:9)握手时。在握手时(/srv/node_modules/mysql/lib/Connection.js:525:10)在握手时(/srv/node_modules/mysql/lib/Connection.js:491:16)在握手时(/srv/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)在协议时(/srv/node_modules/mysql/lib/protocol/protocol/protocol/protocol.js:369:14)在PoolConnection.Connection.\u handleNetworkError(/srv/node\u modules/mysql/lib/Connection.js:421:18)在PoolConnection.Connection.\u handleConnectTimeout(/srv/node\u modules/mysql/lib/Connection.js:417:8)
2019-10-19 16:34:16默认值[20191019t220300]“GET/HTTP/1.1”304
2019-10-19 16:34:18默认[20191019t220300]服务器侦听端口8081。。。
2019-10-19 16:34:18默认[20191019t220300]数据库连接被拒绝。
2019-10-19 16:34:22默认值[20191019t220300]“GET/getnews HTTP/1.1”502
2019-10-19 16:34:22默认值[20191019t220300]/srv/index.js:42
2019-10-19 16:34:22默认[20191019t220300]如果(错误)抛出新错误(错误)
2019-10-19 16:34:22违约[20191019t220300]^
2019-10-19 16:34:22违约[20191019t220300]
2019-10-19 16:34:23默认值[20191019t220300]错误:错误:connect ECONNREFUSED/cloudsql/idylical-anvil-256103:asia-south1:database at Query.(在Query.Sequence.end(/srv/node\u modules/mysql/lib/protocol/sequences/Sequence.js:83:24)处的回调(/srv/index/index.js:42:20)Handshake.onConnect时的/srv/node_modules/mysql/lib/Pool.js:205:13(/srv/node_modules/mysql/lib/Pool.js:58:9)。在握手时(/srv/node_modules/mysql/lib/Connection.js:525:10)在握手时(/srv/node_modules/mysql/lib/Connection.js:491:16)在握手时(/srv/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)在protocol.handleNetworkError“在此处输入代码”(/srv/node_modules/mysql/lib/protocol/protocol/protocol/protocol/protocol/protocol/protocol在Socket.emit(events.js:198:13)的PoolConnection.Connection.\u handleNetworkError(/srv/node\u modules/mysql/lib/Connection.js:421:18)
请确保按照中的说明进行操作。特别是,以下几点很容易被忽略:
- 确保您连接的服务帐户具有
IAM角色,或页面上列出的权限云SQL客户端
- 如果使用App Engine Flex,请确保在
App.yaml中拼写正确
让我们去游泳池;//{
pool=wait mysql.createPool({
socketPath:“/cloudsql/idylical-anvil-256103:asia-south1:database”,
用户:“abc@gmail.com“,//您是否遵循了安装程序,包括验证应用引擎服务帐户是否具有正确的IAM角色?此外,您是否使用应用引擎标准版或应用引擎灵活版?此外,“createPool.query(”看起来很奇怪,因为createPool是您之前调用的函数,并且没有保存的结果。定义了一个池变量来保存结果。您可能应该使用pool.query(.我使用的是标准环境,在使用标准环境时,我应该在哪里添加默认的服务帐户。我链接的文档提到了需要哪些角色。正如我前面提到的,您还应该仔细检查代码(但这不太可能是连接问题本身)我已经为我使用的帐户添加了所有者角色,并使用pool.query更新了he代码