I'm trying to access a mysql database using node.js. I simply run the following command in cmd prompt:
C:est-server> node bin/www
and it displays this message:
Express server listening in port 80
and I've the .js file as follows which the localhost access at port 80:
var express = require('express');
var router = express.Router();
var async = require('async');
var util = require('../utils/util');
var db = require('../utils/database');
var connection = db.connection();
router.get('/login', function (req, res) {
if (req.session.manager) {
return res.redirect('/');
}
if (req.query.tip == 'error') {
var tip = 'username or password incorrect!';
} else {
var tip = null;
}
res.render('login', { tip: tip });
});
router.post('/login', function (req, res) {
var username = req.body.username;
var password = req.body.password;
var sql = 'SELECT * FROM restaurant_accounts WHERE ra_name=?';
connection.query(sql, [username], function (err, result) {
if (err) throw err;
if (result.length == 0) {
return res.redirect('/manager/login?tip=error');
}
var account = result[0];
if (!util.checkHash(password, account.ra_password)) {
return res.redirect('/manager/login?tip=error');
}
connection.query('SELECT * FROM restaurants WHERE rest_owner_id=?', [account.ra_id], function (err, result) {
if (err) throw err;
var restaurant = result[0];
req.session.manager = {
id: account.ra_id,
name: account.ra_name,
rest_id: restaurant.rest_id,
rest_name: restaurant.rest_name
};
res.redirect('/');
});
});
});
router.get('/logout', function (req, res) {
req.session.destroy();
res.redirect('/manager/login');
});
module.exports = router;
When I type localhost:80 on my browser it displays the following screen:
But ofcourse since the database is not linked, I can't get past this step and it shows the "localhost refused to connect" error!
I already have a .sql database with necessary tables created. How do I link these two so I can login from the login page?
EDIT: database.js
var mysql = require('mysql');
var c = mysql.createConnection({
host : 'localhost',
user : 'bjtu',
password : 'bjtu',
database : 'restaurant'
});
// enable error logging for each connection query
c.on('error', function(err) {
console.log(err.code); // example : 'ER_BAD_DB_ERROR'
});
exports.connection = function() {
return c;
};
CONSOLE ERROR FOR SAMPLE.JS
if (err) throw err;
^
Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'me'@'localhost' (using password: YES)
at Handshake.Sequence._packetToError (C:\Mrestro\RESTaurant_backend-masterest-server
ode_modules\mysql\lib\protocol\sequences\Sequence.js:51:14)
at Handshake.ErrorPacket (C:\Mrestro\RESTaurant_backend-masterest-server
ode_modules\mysql\lib\protocol\sequences\Handshake.js:103:18)
at Protocol._parsePacket (C:\Mrestro\RESTaurant_backend-masterest-server
ode_modules\mysql\lib\protocol\Protocol.js:280:23)
at Parser.write (C:\Mrestro\RESTaurant_backend-masterest-server
ode_modules\mysql\lib\protocol\Parser.js:74:12)
at Protocol.write (C:\Mrestro\RESTaurant_backend-masterest-server
ode_modules\mysql\lib\protocol\Protocol.js:39:16)
at Socket.<anonymous> (C:\Mrestro\RESTaurant_backend-masterest-server
ode_modules\mysql\lib\Connection.js:109:28)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at readableAddChunk (_stream_readable.js:153:18)
at Socket.Readable.push (_stream_readable.js:111:10)
--------------------
at Protocol._enqueue (C:\Mrestro\RESTaurant_backend-masterest-server
ode_modules\mysql\lib\protocol\Protocol.js:141:48)
at Protocol.handshake (C:\Mrestro\RESTaurant_backend-masterest-server
ode_modules\mysql\lib\protocol\Protocol.js:52:41)
at Connection.connect (C:\Mrestro\RESTaurant_backend-masterest-server
ode_modules\mysql\lib\Connection.js:136:18)
at Object.<anonymous> (C:\Mrestro\RESTaurant_backend-masterest-server\utils\sample.js:9:12)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
The npm module mysql should do the trick.
Basic connect would look like this:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret',
database : 'my_db'
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
});
connection.end();
Probably soon you would like to have a look at MongoDB. Which you can connect to using module mongoose, for example.
Update:
Try to set port to your connection object in database.js. Like this:
var mysql = require('mysql');
var c = mysql.createConnection({
host : 'localhost',
user : 'bjtu',
password : 'bjtu',
database : 'restaurant',
port : 90
});
// enable error logging for each connection query
c.on('error', function(err) {
console.log(err.code); // example : 'ER_BAD_DB_ERROR'
});
exports.connection = function() {
return c;
};
The default port is 3306, which doesnt look like your case :)
And I suggest you to look into mysql pools.