【发布时间】:2018-12-10 03:15:00
【问题描述】:
我正在向 App-engine 部署一个简单的 nodejs 服务器,除了使用 X-devapi 的数据库连接外,它运行良好。我收到此错误:
All routers failed.
这是我使用的代码:
'use strict';
const express = require('express');
const mysqlx = require('@mysql/xdevapi');
const app = express();
app.get('/', (req, res) => {
const options = { user: 'user_name', password: '@pass',host: 'XX.XXX.XX.XXX'
/*Here I used Public IP address on the of the SQL instance*/,port: XXXX
/*I assigned port 8080 here*/, schema: 'db_name' };
(async function () {
let session;
try {
session = await mysqlx.getSession(options);
const collection = await session.getSchema(options.schema).createCollection('collection');
await collection.add({ name: 'foo' }).execute();
await collection.find().fields('name').execute(console.log); // { name: 'foo' }
} catch (err) {
//console.error(err.message);
res.status(200).send(err.message).end();//used code 200 in order to receive the error too
} finally {
session && session.close();
}
})();
});
// Start the server
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`App listening on port ${PORT}`);
console.log('Press Ctrl+C to quit.');
});
我该如何解决这个问题?
【问题讨论】:
-
该错误基本上意味着无法访问服务器。因此,用于创建会话的主机或端口属性中的一个或两个与 MySQL 服务器实例不匹配。另外,我假设您以某种方式在不同主机的端口 8080 上运行 MySQL(可能使用
--port=8080)。我对谷歌应用引擎不熟悉,你能有那种控制吗?如果没有,可能需要使用默认的 X 协议端口(33060),当然,如果可用的 MySQL 版本确实支持 X 协议。 -
你是对的,请检查下面发布的答案,来自 Google 支持
-
这个错误需要更清楚,因为我在放弃并搜索谷歌之前与这个问题斗争了一个小时。最初定位异常的来源确实很棘手,因为堆栈跟踪没有显示调用
getSession的位置。
标签: mysql node.js google-app-engine google-cloud-platform mysqljs