I'm new to PostgreSQL and I'm wondering if it's possible to get real-time data for my front-end chart using socket.io. I've been trying to follow some examples but I can't get it to work with my sequelize setup. I tried establishing a connection in my server.js file but when it runs it skips the code and goes right into my sequelize query. I posted how I tried connecting at the bottom.
My server.js File
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
app.use(cors({ origin: '*' }));
global.__basedir = __dirname;
// parse requests of content-type - application/json
app.use(bodyParser.json());
// parse requests of content-type - application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));
const dotenv = require('dotenv');
dotenv.config();
const db = require('./app/models');
db.sequelize.sync().then(() => {
console.log('Re-sync db.');
});
// simple route
app.get('/', (req, res) => {
res.json({ message: 'Hello from server.' });
});
require('./app/routes/bitcoin.routes')(app);
// set port, listen for requests
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}.`);
});
bitcoin.model.js
module.exports = (sequelize, Sequelize) => {
const Bitcoin = sequelize.define(
'bitcoin',
{
date: {
type: Sequelize.STRING
},
txvolume_usd: {
type: Sequelize.DOUBLE
},
adjustedtxvolume_usd: {
type: Sequelize.DOUBLE
},
txcount: {
type: Sequelize.INTEGER
},
marketcap_usd: {
type: Sequelize.DOUBLE
},
price_usd: {
type: Sequelize.DOUBLE
},
exchangevolume_usd: {
type: Sequelize.DOUBLE
},
generatedcoins: {
type: Sequelize.DOUBLE
},
fees: {
type: Sequelize.DOUBLE
},
activeaddresses: {
type: Sequelize.INTEGER
},
averagedifficulty: {
type: Sequelize.DOUBLE
},
paymentcount: {
type: Sequelize.DOUBLE
},
mediantxvalue_usd: {
type: Sequelize.DOUBLE
},
medianfee: {
type: Sequelize.DOUBLE
},
blocksize: {
type: Sequelize.INTEGER
},
blockcount: {
type: Sequelize.INTEGER
}
},
{ timestamps: false }
);
Bitcoin.removeAttribute('id');
return Bitcoin;
};
models.index.js
const dbConfig = require('../config/db.config.js');
const Sequelize = require('sequelize');
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
host: dbConfig.HOST,
port: dbConfig.port,
dialect: dbConfig.dialect,
dialectOptions: {
ssl: {
require: true,
rejectUnauthorized: false
}
},
operatorsAliases: 0,
pool: {
max: dbConfig.pool.max,
min: dbConfig.pool.min,
acquire: dbConfig.pool.acquire,
idle: dbConfig.pool.idle
}
});
const db = {};
db.Sequelize = Sequelize;
db.sequelize = sequelize;
db.bitcoin = require('./bitcoin.model.js')(sequelize, Sequelize);
module.exports = db;
Bitcoin Controller
const db = require('../models');
const Bitcoin = db.bitcoin;
const Op = db.Sequelize.Op;
// Create and Save a new Bitcoin
exports.create = (req, res) => {
// Validate request
if (!req.body.date) {
res.status(400).send({
message: 'Content can not be empty!'
});
return;
}
// Create a Bitcoin
const bitcoin = {
date: req.body.date,
txvolume_usd: req.body.txvolume_usd,
adjustedtxvolume_usd: req.body.adjustedtxvolume_usd,
txcount: req.body.txcount,
marketcap_usd: req.body.marketcap_usd,
price_usd: req.body.price_usd,
exchangevolume_usd: req.body.exchangevolume_usd,
generatedcoins: req.body.generatedcoins,
fees: req.body.fees,
activeaddresses: req.body.activeaddresses,
averagedifficulty: req.body.averagedifficulty,
paymentcount: req.body.paymentcount,
mediantxvalue_usd: req.body.mediantxvalue_usd,
medianFmedianfeeee: req.body.medianfee,
blocksize: req.body.blocksize,
blockcount: req.body.blockcount
};
// Save Bitcoin in the database
Bitcoin.create(bitcoin)
.then((data) => {
res.send(data);
})
.catch((err) => {
res.status(500).send({
message: err.message || 'Some error occurred while creating the Bitcoin entry.'
});
});
};
exports.findAll = (req, res) => {
const date = req.query.date;
var condition = date ? { date: { [Op.iLike]: `%${date}%` } } : null;
Bitcoin.findAll({ where: condition })
.then((data) => {
res.send(data);
})
.catch((err) => {
res.status(500).send({
message: err.message || 'Some error occurred while retrieving bitcoin entries.'
});
});
};
// Find a single Bitcoin entry with an id
exports.findOne = (req, res) => {
const id = req.params.id;
Bitcoin.findByPk(id)
.then((data) => {
res.send(data);
})
.catch((err) => {
res.status(500).send({
message: 'Error retrieving bitcoin entry with id=' + id
});
});
};
// Update a Bitcoin entry by the id in the request
exports.update = (req, res) => {
const id = req.params.id;
Bitcoin.update(req.body, {
where: { id: id }
})
.then((num) => {
if (num == 2) {
res.send({
message: 'Bitcoin entry was updated successfully.'
});
} else {
res.send({
message: `Cannot update Bitcoin entry with id=${id}. Maybe it was not found or the body is empty!`
});
}
})
.catch((err) => {
res.status(500).send({
message: 'Error updating Bitcoin entry with id=' + id
});
});
};
// Delete a Bitcoin entry with the specified id in the request
exports.delete = (req, res) => {
const id = req.params.id;
Bitcoin.destroy({
where: { id: id }
})
.then((num) => {
if (num == 1) {
res.send({
message: 'Bitcoin entry was deleted successfully!'
});
} else {
res.send({
message: `Cannot delete Bitcoin entry with id=${id}. Maybe it was not found!`
});
}
})
.catch((err) => {
res.status(500).send({
message: 'Could not delete Bitcoin entry with id=' + id
});
});
};
// Delete all Bitcoin entries from the database.
exports.deleteAll = (req, res) => {
Bitcoin.destroy({
where: {},
truncate: false
})
.then((nums) => {
res.send({ message: `${nums} Bitcoin entries were deleted successfully!` });
})
.catch((err) => {
res.status(500).send({
message: err.message || 'Some error occurred while removing all bitcoin entries.'
});
});
};
Changes I Tried To server.js
const express = require('express');
const app = express();
const server = require('http').createServer(app);
const io = require('socket.io')(server);
const bodyParser = require('body-parser');
const cors = require('cors');
let timerId = null;
let sockets = new Set();
app.use(express.static(__dirname + '/dist'));
io.on('connection', (socket) => {
sockets.add(socket);
console.log(`Socket ${socket.id} added`);
if (!timerId) {
startTimer();
}
socket.on('clientdata', (data) => {
console.log(data);
});
socket.on('disconnect', () => {
console.log(`Deleting socket: ${socket.id}`);
sockets.delete(socket);
console.log(`Remaining sockets: ${sockets.size}`);
});
});