|
@@ -6,13 +6,10 @@
|
|
|
const cluster = require('cluster'),
|
|
|
numCPUs = require('os').cpus().length,
|
|
|
express = require('express'),
|
|
|
- Sequelize = require('sequelize'),
|
|
|
- async = require('async');
|
|
|
+ Sequelize = require('sequelize');
|
|
|
|
|
|
// Middleware
|
|
|
-const bodyParser = require('body-parser'),
|
|
|
- methodOverride = require('method-override'),
|
|
|
- errorHandler = require('errorhandler');
|
|
|
+const bodyParser = require('body-parser');
|
|
|
|
|
|
const sequelize = new Sequelize('hello_world', 'benchmarkdbuser', 'benchmarkdbpass', {
|
|
|
host: 'TFB-database',
|
|
@@ -32,6 +29,7 @@ const World = sequelize.define('world', {
|
|
|
timestamps: false,
|
|
|
freezeTableName: true
|
|
|
});
|
|
|
+
|
|
|
const Fortune = sequelize.define('Fortune', {
|
|
|
id: {
|
|
|
type: 'Sequelize.INTEGER',
|
|
@@ -59,14 +57,6 @@ if (cluster.isMaster) {
|
|
|
// Configuration
|
|
|
// https://github.com/expressjs/method-override#custom-logic
|
|
|
app.use(bodyParser.urlencoded({ extended: true }));
|
|
|
- app.use(methodOverride((req, res) => {
|
|
|
- if (req.body && typeof req.body === 'object' && '_method' in req.body) {
|
|
|
- // look in urlencoded POST bodies and delete it
|
|
|
- const method = req.body._method;
|
|
|
- delete req.body._method;
|
|
|
- return method;
|
|
|
- }
|
|
|
- }));
|
|
|
|
|
|
// Set headers for all routes
|
|
|
app.use((req, res, next) => {
|
|
@@ -77,40 +67,22 @@ if (cluster.isMaster) {
|
|
|
app.set('view engine', 'pug');
|
|
|
app.set('views', __dirname + '/views');
|
|
|
|
|
|
- // Check Node env.
|
|
|
- const env = process.env.NODE_ENV || 'development';
|
|
|
- if ('development' == env) {
|
|
|
- app.use(errorHandler({ dumpExceptions: true, showStack: true }));
|
|
|
- }
|
|
|
- if ('production' == env) {
|
|
|
- app.use(errorHandler());
|
|
|
- }
|
|
|
-
|
|
|
// Routes
|
|
|
- app.get('/mysql-orm', (req, res) => {
|
|
|
- let queriesRaw = parseInt(req.query.queries, 10),
|
|
|
- queries = isNaN(queriesRaw) ? 1 : queriesRaw;
|
|
|
- const queryFunctions = [];
|
|
|
-
|
|
|
- queries = Math.min(Math.max(queries, 1), 500);
|
|
|
+ app.get('/mysql-orm', async (req, res) => {
|
|
|
+ const results = [],
|
|
|
+ queries = Math.min(parseInt(req.query.queries) || 1, 500);
|
|
|
|
|
|
for (let i = 1; i <= queries; i++ ) {
|
|
|
- queryFunctions.push((callback) => {
|
|
|
- World.findOne({
|
|
|
+ const world = await World.findOne({
|
|
|
where: {
|
|
|
id: Math.floor(Math.random() * 10000) + 1}
|
|
|
}
|
|
|
- ).then((world) => callback(null, world));
|
|
|
- });
|
|
|
+ );
|
|
|
+ results.push(world);
|
|
|
}
|
|
|
|
|
|
- async.parallel(queryFunctions, (err, results) => {
|
|
|
- if (req.query.queries == undefined) {
|
|
|
- results = results[0];
|
|
|
- }
|
|
|
- res.setHeader("Content-Type", "application/json");
|
|
|
- res.send(results);
|
|
|
- });
|
|
|
+ res.setHeader("Content-Type", "application/json");
|
|
|
+ res.send(results.length > 1 ? results : results[0]);
|
|
|
});
|
|
|
|
|
|
app.get('/mysql-orm-fortune', (req, res) => {
|
|
@@ -123,35 +95,23 @@ if (cluster.isMaster) {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
- app.get('/mysql-orm-update', (req, res) => {
|
|
|
- const selectFunctions = [],
|
|
|
+ app.get('/mysql-orm-update', async (req, res) => {
|
|
|
+ const results = [],
|
|
|
queries = Math.min(parseInt(req.query.queries) || 1, 500);
|
|
|
|
|
|
for (let i = 1; i <= queries; i++ ) {
|
|
|
- selectFunctions.push((callback) => {
|
|
|
- World.findOne({
|
|
|
+ const world = await World.findOne({
|
|
|
where: {
|
|
|
- id: Math.floor(Math.random() * 10000) + 1}
|
|
|
+ id: ~~(Math.random() * 10000) + 1
|
|
|
+ }
|
|
|
}
|
|
|
- ).then((world) => callback(null, world));
|
|
|
- });
|
|
|
+ );
|
|
|
+ world.randomNumber = ~~(Math.random() * 10000) + 1;
|
|
|
+ await world.save();
|
|
|
+ results.push(world);
|
|
|
}
|
|
|
|
|
|
- async.parallel(selectFunctions, (err, worlds) => {
|
|
|
- const updateFunctions = [];
|
|
|
-
|
|
|
- for (let i = 0; i < queries; i++) {
|
|
|
- ((i) => {
|
|
|
- updateFunctions.push((callback) => {
|
|
|
- worlds[i].randomNumber = Math.ceil(Math.random() * 10000);
|
|
|
- worlds[i].save().then(callback());
|
|
|
- });
|
|
|
- })(i);
|
|
|
- }
|
|
|
-
|
|
|
- async.parallel(updateFunctions, (err, updates) => res.send(worlds));
|
|
|
- });
|
|
|
-
|
|
|
+ res.send(results);
|
|
|
});
|
|
|
|
|
|
app.listen(8080);
|