Kaynağa Gözat

JavaScript/Express fix (#2866)

* JavaScript/Express fix

* fix file name

* fix app.js

* point to correct setup file
Nate 8 yıl önce
ebeveyn
işleme
e3064987ba

+ 2 - 0
frameworks/JavaScript/express/.gitignore

@@ -0,0 +1,2 @@
+package-lock.json
+node_modules

+ 0 - 178
frameworks/JavaScript/express/app.js

@@ -6,66 +6,12 @@
 const cluster = require('cluster'),
   numCPUs = require('os').cpus().length,
   express = require('express'),
-  Sequelize = require('sequelize'),
-  mongoose = require('mongoose'),
-  conn = mongoose.connect('mongodb://TFB-database/hello_world'),
   async = require('async');
 
-// Middleware
 const bodyParser = require('body-parser'),
   methodOverride = require('method-override'),
   errorHandler = require('errorhandler');
 
-const Schema = mongoose.Schema,
-  ObjectId = Schema.ObjectId;
-
-const WorldSchema = new mongoose.Schema({
-    id          : Number,
-    randomNumber: Number
-  }, {
-    collection: 'world'
-  }),
-  MWorld = conn.model('world', WorldSchema);
-
-const FortuneSchema = new mongoose.Schema({
-    id          : Number,
-    message     : String
-  }, {
-    collection: 'fortune'
-  }),
-  MFortune = conn.model('fortune', FortuneSchema);
-
-const sequelize = new Sequelize('hello_world', 'benchmarkdbuser', 'benchmarkdbpass', {
-  host: 'TFB-database',
-  dialect: 'mysql',
-  logging: false
-});
-
-const World = sequelize.define('World', {
-  id: {
-    type: 'Sequelize.INTEGER',
-    primaryKey: true
-  },
-  randomNumber: {
-    type: 'Sequelize.INTEGER'
-  }
-}, {
-  timestamps: false,
-  freezeTableName: true
-});
-const Fortune = sequelize.define('Fortune', {
-  id: {
-    type: 'Sequelize.INTEGER',
-    primaryKey: true
-  },
-  message: {
-    type: 'Sequelize.STRING'
-  }
-}, {
-  timestamps: false,
-  freezeTableName: true
-});
-
 if (cluster.isMaster) {
   // Fork workers.
   for (let i = 0; i < numCPUs; i++) {
@@ -113,129 +59,5 @@ if (cluster.isMaster) {
   app.get('/plaintext', (req, res) =>
     res.header('Content-Type', 'text/plain').send('Hello, World!'));
 
-  app.get('/mongoose', (req, res) => {
-    let queriesRaw = parseInt(req.query.queries, 10),
-      queries = isNaN(queriesRaw) ? 1 : queriesRaw;
-    const queryFunctions = [];
-
-    queries = Math.min(Math.max(queries, 1), 500);
-
-    for (let i = 1; i <= queries; i++ ) {
-      queryFunctions.push((callback) =>
-        MWorld.findOne({ id: (Math.floor(Math.random() * 10000) + 1) })
-          .exec(callback));
-    }
-
-    async.parallel(queryFunctions, (err, results) =>
-      res.send(!req.query.queries ? results[0] : results));
-  });
-
-  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);
-
-    for (let i = 1; i <= queries; i++ ) {
-      queryFunctions.push((callback) => {
-        World.findOne({
-          where: {
-            id: Math.floor(Math.random() * 10000) + 1}
-          }
-        ).then((world) => callback(null, world));
-      });
-    }
-
-    async.parallel(queryFunctions, (err, results) => {
-      if (req.query.queries == undefined) {
-        results = results[0];
-      }
-      res.setHeader("Content-Type", "application/json");
-      res.send(results);
-    });
-  });
-
-  app.get('/mongoose-fortune', (req, res) => {
-    MFortune.find({}, (err, fortunes) => {
-      const newFortune = {id: 0, message: "Additional fortune added at request time."};
-      fortunes.push(newFortune);
-      fortunes.sort((a, b) => (a.message < b.message) ? -1 : 1);
-
-      res.render('fortunes', {fortunes: fortunes});
-    });
-  });
-
-  app.get('/mysql-orm-fortune', (req, res) => {
-    Fortune.findAll().then((fortunes) => {
-      const newFortune = {id: 0, message: "Additional fortune added at request time."};
-      fortunes.push(newFortune);
-      fortunes.sort((a, b) => (a.message < b.message) ? -1 : 1);
-
-      res.render('fortunes', {fortunes: fortunes});
-    });
-  });
-
-  app.get('/mongoose-update', (req, res) => {
-    const selectFunctions = [],
-        queries = Math.min(parseInt(req.query.queries) || 1, 500);
-
-    for (let i = 1; i <= queries; i++ ) {
-      selectFunctions.push((callback) =>
-        MWorld.findOne({ id: Math.floor(Math.random() * 10000) + 1 })
-          .exec(callback));
-    }
-
-    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);
-            MWorld.update({
-              id: worlds[i].id
-            }, {
-              randomNumber: worlds[i].randomNumber
-            }, callback);
-          });
-        })(i);
-      }
-
-      async.parallel(updateFunctions, (err, updates) => res.send(worlds));
-    });
-  });
-
-  app.get('/mysql-orm-update', (req, res) => {
-    const selectFunctions = [],
-        queries = Math.min(parseInt(req.query.queries) || 1, 500);
-
-    for (let i = 1; i <= queries; i++ ) {
-      selectFunctions.push((callback) => {
-        World.findOne({
-          where: {
-            id: Math.floor(Math.random() * 10000) + 1}
-          }
-        ).then((world) => callback(null, 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));
-    });
-
-  });
-
   app.listen(8080);
 }

+ 1 - 1
frameworks/JavaScript/express/benchmark_config.json

@@ -2,7 +2,7 @@
   "framework": "express",
   "tests": [{
     "default": {
-      "setup_file": "setup-mongodb",
+      "setup_file": "setup",
       "json_url": "/json",
       "plaintext_url": "/plaintext",
       "port": 8080,

+ 137 - 0
frameworks/JavaScript/express/mongodb-app.js

@@ -0,0 +1,137 @@
+
+/**
+ * Module dependencies.
+ */
+
+const cluster = require('cluster'),
+  numCPUs = require('os').cpus().length,
+  express = require('express'),
+  mongoose = require('mongoose'),
+  conn = mongoose.connect('mongodb://TFB-database/hello_world'),
+  async = require('async');
+
+// Middleware
+const bodyParser = require('body-parser'),
+  methodOverride = require('method-override'),
+  errorHandler = require('errorhandler');
+
+const Schema = mongoose.Schema,
+  ObjectId = Schema.ObjectId;
+
+const WorldSchema = new mongoose.Schema({
+    id          : Number,
+    randomNumber: Number
+  }, {
+    collection: 'world'
+  }),
+  MWorld = conn.model('world', WorldSchema);
+
+const FortuneSchema = new mongoose.Schema({
+    id          : Number,
+    message     : String
+  }, {
+    collection: 'fortune'
+  }),
+  MFortune = conn.model('fortune', FortuneSchema);
+
+if (cluster.isMaster) {
+  // Fork workers.
+  for (let i = 0; i < numCPUs; i++) {
+    cluster.fork();
+  }
+
+  cluster.on('exit', (worker, code, signal) =>
+    console.log('worker ' + worker.pid + ' died'));
+} else {
+  const app = module.exports = express();
+
+  // 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) => {
+    res.setHeader("Server", "Express");
+    return next();
+  });
+
+  app.set('view engine', 'jade');
+  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('/mongoose', (req, res) => {
+    let queriesRaw = parseInt(req.query.queries, 10),
+      queries = isNaN(queriesRaw) ? 1 : queriesRaw;
+    const queryFunctions = [];
+
+    queries = Math.min(Math.max(queries, 1), 500);
+
+    for (let i = 1; i <= queries; i++ ) {
+      queryFunctions.push((callback) =>
+        MWorld.findOne({ id: (Math.floor(Math.random() * 10000) + 1) })
+          .exec(callback));
+    }
+
+    async.parallel(queryFunctions, (err, results) =>
+      res.send(!req.query.queries ? results[0] : results));
+  });
+
+  app.get('/mongoose-fortune', (req, res) => {
+    MFortune.find({}, (err, fortunes) => {
+      const newFortune = {id: 0, message: "Additional fortune added at request time."};
+      fortunes.push(newFortune);
+      fortunes.sort((a, b) => (a.message < b.message) ? -1 : 1);
+
+      res.render('fortunes', {fortunes: fortunes});
+    });
+  });
+
+  app.get('/mongoose-update', (req, res) => {
+    const selectFunctions = [],
+        queries = Math.min(parseInt(req.query.queries) || 1, 500);
+
+    for (let i = 1; i <= queries; i++ ) {
+      selectFunctions.push((callback) =>
+        MWorld.findOne({ id: Math.floor(Math.random() * 10000) + 1 })
+          .exec(callback));
+    }
+
+    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);
+            MWorld.update({
+              id: worlds[i].id
+            }, {
+              randomNumber: worlds[i].randomNumber
+            }, callback);
+          });
+        })(i);
+      }
+
+      async.parallel(updateFunctions, (err, updates) => res.send(worlds));
+    });
+  });
+
+  app.listen(8080);
+}

+ 158 - 0
frameworks/JavaScript/express/mysql-app.js

@@ -0,0 +1,158 @@
+
+/**
+ * Module dependencies.
+ */
+
+const cluster = require('cluster'),
+  numCPUs = require('os').cpus().length,
+  express = require('express'),
+  Sequelize = require('sequelize'),
+  async = require('async');
+
+// Middleware
+const bodyParser = require('body-parser'),
+  methodOverride = require('method-override'),
+  errorHandler = require('errorhandler');
+
+const sequelize = new Sequelize('hello_world', 'benchmarkdbuser', 'benchmarkdbpass', {
+  host: 'TFB-database',
+  dialect: 'mysql',
+  logging: false
+});
+
+const World = sequelize.define('World', {
+  id: {
+    type: 'Sequelize.INTEGER',
+    primaryKey: true
+  },
+  randomNumber: {
+    type: 'Sequelize.INTEGER'
+  }
+}, {
+  timestamps: false,
+  freezeTableName: true
+});
+const Fortune = sequelize.define('Fortune', {
+  id: {
+    type: 'Sequelize.INTEGER',
+    primaryKey: true
+  },
+  message: {
+    type: 'Sequelize.STRING'
+  }
+}, {
+  timestamps: false,
+  freezeTableName: true
+});
+
+if (cluster.isMaster) {
+  // Fork workers.
+  for (let i = 0; i < numCPUs; i++) {
+    cluster.fork();
+  }
+
+  cluster.on('exit', (worker, code, signal) =>
+    console.log('worker ' + worker.pid + ' died'));
+} else {
+  const app = module.exports = express();
+
+  // 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) => {
+    res.setHeader("Server", "Express");
+    return next();
+  });
+
+  app.set('view engine', 'jade');
+  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);
+
+    for (let i = 1; i <= queries; i++ ) {
+      queryFunctions.push((callback) => {
+        World.findOne({
+            where: {
+              id: Math.floor(Math.random() * 10000) + 1}
+          }
+        ).then((world) => callback(null, world));
+      });
+    }
+
+    async.parallel(queryFunctions, (err, results) => {
+      if (req.query.queries == undefined) {
+        results = results[0];
+      }
+      res.setHeader("Content-Type", "application/json");
+      res.send(results);
+    });
+  });
+
+  app.get('/mysql-orm-fortune', (req, res) => {
+    Fortune.findAll().then((fortunes) => {
+      const newFortune = {id: 0, message: "Additional fortune added at request time."};
+      fortunes.push(newFortune);
+      fortunes.sort((a, b) => (a.message < b.message) ? -1 : 1);
+
+      res.render('fortunes', {fortunes: fortunes});
+    });
+  });
+
+  app.get('/mysql-orm-update', (req, res) => {
+    const selectFunctions = [],
+      queries = Math.min(parseInt(req.query.queries) || 1, 500);
+
+    for (let i = 1; i <= queries; i++ ) {
+      selectFunctions.push((callback) => {
+        World.findOne({
+            where: {
+              id: Math.floor(Math.random() * 10000) + 1}
+          }
+        ).then((world) => callback(null, 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));
+    });
+
+  });
+
+  app.listen(8080);
+}

+ 5 - 2
frameworks/JavaScript/express/setup-mongodb.sh

@@ -1,5 +1,8 @@
 #!/bin/bash
 
-fw_depends mongodb
+fw_depends nodejs mongodb
 
-source ./setup.sh
+# install dependencies
+npm install
+# run app
+NODE_ENV=production node mongodb-app &

+ 5 - 2
frameworks/JavaScript/express/setup-mysql.sh

@@ -1,5 +1,8 @@
 #!/bin/bash
 
-fw_depends mysql
+fw_depends nodejs mysql
 
-source ./setup.sh
+# install dependencies
+npm install
+# run app
+NODE_ENV=production node mysql-app &