0

I am using Node.js and Express, and I would like to query a MySQL database on AWS EC2.

I have created connection to the database in db_connection.js file and tried to export the connection (db) so I can use db.query() in other js files. I have confirmed that the connection is working (displays "Connected" in console) and when I put db.query() right after db.connect() in db_connection.js, it works.

The problem is that when I use db.query() in other files (e.g timetables.js), I receive "TypeError: db.query is not a function" error.

Could anyone tell me how to fix this? Thank you.

db_connection.js

let mysql = require('mysql2');
let Client = require('ssh2').Client;

let ssh = new Client();

process.on('uncaughtException', function (error) {
  console.log(error.stack);
});

ssh.on('ready', function () {
  ssh.forwardOut(
    '127.0.0.1',
    12345,
    '127.0.0.1',
    3306,
    function (err, stream) {
      if (err) {
        console.error('forwardOut Error: ' + err);
        return;
      }
      console.log('forwardOut: ready!');
      let db = mysql.createConnection({
        user: 'user',
        password: 'password',
        database: 'database',
        stream: stream
      });
      db.connect(function (err) {
        if (err) {
          console.error('error connecting: ' + err.stack);
          return;
        }
        console.log('Connected');
        module.exports = db;
      });
    });
}).connect({
  host: 'xxx.xxx.xxx.xxx',
  user: 'user',
  privateKey: require('fs').readFileSync('xxx.pem'),
  port: 22
});

timetables.js

let express = require('express');
let router = express.Router();
let db=require('../db_connection');

router.get('/mytimetable', function(req, res, next) {
  let sql='Select * FROM timetables T, courses C, classoptions O WHERE T.classoptid = O.classoptid AND O.cid = C.cid ORDER BY C.cid, O.classopttitle';
  db.query(sql, function (err, data, fields) {
  if (err) throw err;
  res.render('timetable', { title: 'Timetable', timetableData: data});
});
});
module.exports = router;
2
  • you exported from some result of many asynchronous functions so it cannot work, check more other approach stackoverflow.com/questions/20238829/… Commented Mar 6, 2022 at 7:19
  • The link is very useful, helped me to solve the problem. Thank you so much~~ Commented Mar 6, 2022 at 12:33

1 Answer 1

1

I used the multiple callback way suggested in the link that buithienquyet provided. The error message no longer appears and the query is executed correctly.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.