Google app engine 我无法从app engine中托管的nodejs应用程序连接到gcloud sql

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”

我在谷歌云上有一个托管节点应用程序和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”
});
};
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)

请确保按照中的说明进行操作。特别是,以下几点很容易被忽略:

  • 确保您连接的服务帐户具有
    云SQL客户端
    IAM角色,或页面上列出的权限
  • 如果使用App Engine Flex,请确保在
    App.yaml中拼写正确
最后,请务必查看页面。特别是,在上面的示例中,您正在使用名称初始化一个函数,然后对该函数调用query。相反,您应该使用池来执行查询:


让我们去游泳池;//{
pool=wait mysql.createPool({
socketPath:“/cloudsql/idylical-anvil-256103:asia-south1:database”,

用户:“abc@gmail.com“,//您是否遵循了安装程序,包括验证应用引擎服务帐户是否具有正确的IAM角色?此外,您是否使用应用引擎标准版或应用引擎灵活版?此外,“createPool.query(”看起来很奇怪,因为createPool是您之前调用的函数,并且没有保存的结果。定义了一个池变量来保存结果。您可能应该使用pool.query(.我使用的是标准环境,在使用标准环境时,我应该在哪里添加默认的服务帐户。我链接的文档提到了需要哪些角色。正如我前面提到的,您还应该仔细检查代码(但这不太可能是连接问题本身)我已经为我使用的帐户添加了所有者角色,并使用pool.query更新了he代码