Arjun Bhandari
Arjun Bhandari

Reputation: 299

NodejS express ReferenceError: connection is not defined

I am creating a simple server application using the following code

const express = require('express');
const mysql = require('mysql');
const PORT = process.env.PORT || 3000;

const app = express();

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'user',
  password: 'password',
  database: 'mydata',
});

connection.connect(function (err) {
  err ? console.log(err) : console.log(connection);
});

require('./routes/html-routes')(app);

app.listen(PORT, () => {
  console.log('app running on port %s', PORT);
});

module.exports = app;

in file server.js

and then a route in file html-routes.js

const mysql = require('mysql');

module.exports = function (app) {
  app.get('/', function (req, res) {
    connection.query('select * from mydata;', function (err, data) {
      err ? res.send(err) : res.json({ mydata: data });
    });
  });
};

to get data from database

I get the error ReferenceError: connection is not defined at /Users/arjunbhandari/Desktop/GL-IT/backend/routes/html-routes.js:5:5

I have struggled for the past 6 hours and cannot understand the problem.

Thanks

Upvotes: 1

Views: 2683

Answers (1)

tmarwen
tmarwen

Reputation: 16354

As the error states, there is no connection defined (or inherited) within ./routes/html-routes.js.

You still can pass the connection property as a second argument to your exported function:

const mysql = require('mysql');

module.exports = function (app, connection) {
  app.get('/', function (req, res) {
    connection.query('select * from mydata;', function (err, data) {
      err ? res.send(err) : res.json({ mydata: data });
    });
  });
};

then update the route mounting call within your main server file:

require('./routes/html-routes')(app, connection);

You should review your route implementation logic as this should not be the best design approach to use data-store connections.

Upvotes: 1

Related Questions