0

I am deploying a simple nodejs server to App-engine which works well except for the database connection using the X-devapi. I am getting this error:

All routers failed.

Here is the code I use:

'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.');
});

How can I solve this?

Geek Guy
  • 710
  • 1
  • 8
  • 28
  • 1
    The error basically means the server can't be reached. So either or both the host or the port properties used to create the session don't match the MySQL server instance. Also, I assume you are somehow running MySQL on port 8080 in a different host (probably using `--port=8080`). I'm not familiar with Google App Engine, can you even have that kind of control? If not, maybe you need to use the default X Protocol port (33060), and that is, of course, if the MySQL version available actually supports the X Protocol. – ruiquelhas Jul 07 '18 at 00:02
  • You are right, check the answer am posting next, from Google support – Geek Guy Jul 07 '18 at 12:27
  • This error needs to be made more clear because I battled this for a good hour before I gave up and searched Google. It was really tricky to locate where the exception was coming from initially because the stack trace doesn't show where `getSession` is being called from. – BugHunterUK Sep 07 '18 at 16:46

1 Answers1

1

It turns out that Google cloud SQL tools still do not have the X devAPI enabled if you check response to my concern here and the feature request here

Geek Guy
  • 710
  • 1
  • 8
  • 28