Skip to content

Commit ddeacad

Browse files
committed
Add simple sample and usage with MongoDB
1 parent 9d30467 commit ddeacad

File tree

3 files changed

+391
-57
lines changed

3 files changed

+391
-57
lines changed

package.json

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,21 @@
44
"description": "Node.js sample app for OpenShift 3",
55
"main": "server.js",
66
"dependencies": {
7-
"express": "*"
8-
},
9-
"devDependencies": {
10-
"nodemon": "*"
7+
"express": "*",
8+
"mongodb": "*",
9+
"ejs": "*"
1110
},
1211
"engine": {
1312
"node": "*",
1413
"npm": "*"
1514
},
1615
"scripts": {
17-
"dev": "nodemon --ignore node_modules/ server.js",
1816
"start": "node server.js"
1917
},
2018
"repository": {
2119
"type": "git",
2220
"url": "http://github.com/openshift/nodejs-ex.git"
2321
},
24-
"keywords": [
25-
"Echo"
26-
],
2722
"author": "Steve Speicher <[email protected]>",
2823
"license": "",
2924
"bugs": {

server.js

Lines changed: 82 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,86 @@
1-
var util = require('util');
2-
var url = require('url');
3-
var qs = require('querystring');
4-
var os = require('os')
5-
var port = process.env.PORT || process.env.port || process.env.OPENSHIFT_NODEJS_PORT || 8080;
6-
var ip = process.env.OPENSHIFT_NODEJS_IP || '0.0.0.0';
7-
var nodeEnv = process.env.NODE_ENV || 'unknown';
8-
1+
// OpenShift sample Node application
92
var express = require('express');
10-
var app = express();
11-
12-
app.use(function(req, res, next) {
13-
var url_parts = url.parse(req.url, true);
14-
15-
var body = '';
16-
req.on('data', function (data) {
17-
body += data;
18-
});
19-
req.on('end', function () {
20-
var formattedBody = qs.parse(body);
21-
22-
res.writeHead(200, {'Content-Type': 'text/plain'});
23-
24-
res.write('Hello OpenShift World! This is a Node.js-based sample application.\n');
25-
res.write('Host: ' + req.headers.host + '\n');
26-
res.write('\n');
27-
res.write('node.js Production Mode: ' + (nodeEnv == 'production' ? 'yes' : 'no') + '\n');
28-
res.write('\n');
29-
res.write('HTTP/' + req.httpVersion +'\n');
30-
res.write('Request headers:\n');
31-
res.write(util.inspect(req.headers, null) + '\n');
32-
res.write('Request query:\n');
33-
res.write(util.inspect(url_parts.query, null) + '\n');
34-
res.write('Request body:\n');
35-
res.write(util.inspect(formattedBody, null) + '\n');
36-
res.write('\n');
37-
res.write('Host: ' + os.hostname() + '\n');
38-
res.write('OS Type: ' + os.type() + '\n');
39-
res.write('OS Platform: ' + os.platform() + '\n');
40-
res.write('OS Arch: ' + os.arch() + '\n');
41-
res.write('OS Release: ' + os.release() + '\n');
42-
res.write('OS Uptime: ' + os.uptime() + '\n');
43-
res.write('OS Free memory: ' + os.freemem() / 1024 / 1024 + 'mb\n');
44-
res.write('OS Total memory: ' + os.totalmem() / 1024 / 1024 + 'mb\n');
45-
res.write('OS CPU count: ' + os.cpus().length + '\n');
46-
res.write('OS CPU model: ' + os.cpus()[0].model + '\n');
47-
res.write('OS CPU speed: ' + os.cpus()[0].speed + 'mhz\n');
48-
res.end('\n');
49-
});
50-
next();
3+
var fs = require('fs');
4+
var app = express();
5+
var eps = require('ejs');
6+
7+
app.engine('html', require('ejs').renderFile);
8+
9+
var port = process.env.PORT || process.env.OPENSHIFT_NODEJS_PORT || 8080;
10+
var ip = process.env.IP || process.env.OPENSHIFT_NODEJS_IP || '0.0.0.0';
11+
var mongoURL = process.env.OPENSHIFT_MONGODB_DB_URL || process.env.MONGO_URL;
12+
var mongoURLLabel = "";
13+
if (mongoURL == null && process.env.DATABASE_SERVICE_NAME) {
14+
var mongoServiceName = process.env.DATABASE_SERVICE_NAME.toUpperCase();
15+
var mongoHost = process.env[mongoServiceName + "_SERVICE_HOST"];
16+
var mongoPort = process.env[mongoServiceName + "_SERVICE_PORT"];
17+
var mongoUser = process.env.MONGODB_USER
18+
if (mongoHost && mongoPort && process.env.MONGODB_DATABASE) {
19+
mongoURLLabel = mongoURL = 'mongodb://';
20+
if (process.env.MONGODB_USER && process.env.MONGODB_PASSWORD) {
21+
mongoURL += process.env.MONGODB_USER + ':' + process.env.MONGODB_PASSWORD + '@';
22+
}
23+
// Provide UI label that excludes user id and pw
24+
25+
mongoURLLabel += mongoHost + ':' + mongoPort + '/' + process.env.MONGODB_DATABASE;
26+
mongoURL += mongoHost + ':' + mongoPort + '/' + process.env.MONGODB_DATABASE;
27+
}
28+
}
29+
var db = null;
30+
var dbDetails = new Object();
31+
32+
var initDb = function(callback) {
33+
if (mongoURL == null) return;
34+
35+
var mongodb = require('mongodb');
36+
if (mongodb == null) return;
37+
38+
mongodb.connect(mongoURL, function(err, conn) {
39+
if (err) {
40+
callback(err);
41+
return;
42+
}
43+
44+
db = conn;
45+
dbDetails.databaseName = db.databaseName;
46+
dbDetails.url = mongoURLLabel;
47+
dbDetails.type = 'MongoDB';
48+
49+
console.log("Connected to MongoDB at: " + mongoURL);
50+
});
51+
};
52+
53+
app.get('/', function (req, res) {
54+
if (db) {
55+
var col = db.collection('counts');
56+
// Create a document with request IP and current time of request
57+
col.insert({ip: req.ip, date: Date.now()});
58+
col.count(function(err, count){
59+
res.render('index.html', { pageCountMessage : count, dbInfo: dbDetails });
60+
});
61+
} else {
62+
res.render('index.html', { pageCountMessage : null});
63+
}
64+
});
65+
66+
app.get('/pagecount', function (req, res) {
67+
if (db) {
68+
db.collection('counts').count(function(err, count ){
69+
res.send('{ pageCount: ' + count +'}');
70+
});
71+
} else {
72+
res.send('{ pageCount: -1 }');
73+
}
74+
});
75+
76+
// error handling
77+
app.use(function(err, req, res, next){
78+
console.error(err.stack);
79+
res.status(500).send('Something bad happened!');
80+
});
81+
82+
initDb(function(err){
83+
console.log('Error connecting to Mongo. Message:\n'+err);
5184
});
5285

5386
app.listen(port, ip);

0 commit comments

Comments
 (0)