├── .gitignore ├── .travis.yml ├── README.md ├── lib ├── api.js ├── click.js ├── home.js ├── index.js └── start.js ├── package.json └── test └── index.test.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | lcov.info 4 | .env 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 4.2 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # simpleServer 2 | [![devDependency Status](https://david-dm.org/SimonLab/simpleServer/dev-status.svg)](https://david-dm.org/SimonLab/simpleServer#info=devDependencies) 3 | ## What? 4 | 5 | A simple web server. 6 | 7 | ## Why 8 | 9 | The server can receive some data on the /data endpoint and print them on the console. It allow me to test other services which send data to this endpoint 10 | 11 | ## How? 12 | 13 | The server is using Hapi and is hosted on Heroku. 14 | -------------------------------------------------------------------------------- /lib/api.js: -------------------------------------------------------------------------------- 1 | exports.register = function (server, options, next) { 2 | 3 | server.route([ 4 | { 5 | method: 'POST', 6 | path: '/data', 7 | config: { 8 | description: 'return the data receive', 9 | handler: function (request, reply) { 10 | return reply('Here is what I receive: ' + JSON.stringify(request.payload)); 11 | } 12 | } 13 | } 14 | 15 | ]); 16 | 17 | return next(); 18 | }; 19 | 20 | exports.register.attributes = { 21 | name: 'Data' 22 | }; 23 | -------------------------------------------------------------------------------- /lib/click.js: -------------------------------------------------------------------------------- 1 | var redisClient = require('redis-connection')(); 2 | exports.register = function (server, options, next) { 3 | 4 | server.route([ 5 | { 6 | method: 'POST', 7 | path: '/click', 8 | config: { 9 | description: 'increment the click variable', 10 | handler: function (request, reply) { 11 | //get redis value click 12 | redisClient.get('click', function(err, res) { 13 | 14 | if(err) { 15 | console.log(err) 16 | return reply('500') 17 | } 18 | var click = 1; 19 | if(res) { 20 | console.log('increment'); 21 | click = parseInt(res,10) + 1 22 | } 23 | redisClient.set('click', click); 24 | }) 25 | return reply('200'); 26 | } 27 | } 28 | }, 29 | { 30 | method: 'GET', 31 | path: '/click', 32 | config: { 33 | description: 'return the click variable', 34 | handler: function (request, reply) { 35 | redisClient.get('click', function(err, res) { 36 | 37 | if(err) { 38 | console.log(err) 39 | return reply('500') 40 | } 41 | var click = 0; 42 | if (res) { 43 | click = res 44 | } 45 | return reply('Number of click: ' + click); 46 | }) 47 | } 48 | } 49 | } 50 | 51 | ]); 52 | 53 | return next(); 54 | }; 55 | 56 | exports.register.attributes = { 57 | name: 'Click' 58 | }; 59 | -------------------------------------------------------------------------------- /lib/home.js: -------------------------------------------------------------------------------- 1 | exports.register = function (server, options, next) { 2 | 3 | server.route([ 4 | { 5 | method: 'GET', 6 | path: '/', 7 | config: { 8 | description: 'return the home page', 9 | handler: function (request, reply) { 10 | return reply('Welcome on simpleServer'); 11 | } 12 | } 13 | } 14 | 15 | ]); 16 | 17 | return next(); 18 | }; 19 | 20 | exports.register.attributes = { 21 | name: 'Home' 22 | }; 23 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | var Hapi = require('hapi'); 2 | var Home = require('./home.js'); 3 | var Click = require('./click.js'); 4 | var Data = require('./api.js'); 5 | 6 | exports.init = function (port, next) { 7 | 8 | var server = new Hapi.Server(); 9 | server.connection({port: port}); 10 | server.register([Home, Click, Data], function (err) { 11 | if (err) { 12 | return next(err); 13 | } 14 | 15 | server.start(function (err) { 16 | 17 | return next(err, server); 18 | }); 19 | }); 20 | }; 21 | -------------------------------------------------------------------------------- /lib/start.js: -------------------------------------------------------------------------------- 1 | var Server = require('./index.js'); 2 | var Hoek = require('hoek'); 3 | 4 | Server.init(process.env.PORT || 8000, function (err, server) { 5 | 6 | Hoek.assert(!err, err); 7 | console.log('The server is running on: ', server.info.uri); 8 | }); 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simpleserver", 3 | "version": "1.0.0", 4 | "description": "A simple web server", 5 | "main": "lib/start.js", 6 | "scripts": { 7 | "test": "./node_modules/lab/bin/lab ./test/*.test.js -m 0 -c -a code -r lcov -o lcov.info -r console -o stdout", 8 | "start": "node lib/start.js" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/SimonLab/simpleServer.git" 13 | }, 14 | "keywords": [ 15 | "web", 16 | "server" 17 | ], 18 | "author": "SimonLab", 19 | "license": "ISC", 20 | "bugs": { 21 | "url": "https://github.com/SimonLab/simpleServer/issues" 22 | }, 23 | "homepage": "https://github.com/SimonLab/simpleServer#readme", 24 | "dependencies": { 25 | "hapi": "^11.1.0", 26 | "hoek": "^3.0.1", 27 | "keyword-highlighter": "^1.0.3", 28 | "redis-connection": "^4.0.1" 29 | }, 30 | "devDependencies": { 31 | "code": "^2.0.1", 32 | "lab": "^7.2.0" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /test/index.test.js: -------------------------------------------------------------------------------- 1 | var Code = require('code'); 2 | var Lab = require('lab'); 3 | var Hapi = require('hapi'); 4 | var Server = require('../lib/index.js'); 5 | 6 | var lab = exports.lab = Lab.script(); 7 | var expect = Code.expect; 8 | var it = lab.test; 9 | 10 | it('starts server and return an instance of Hapi server', function (done) { 11 | 12 | Server.init(0, function (err, server) { 13 | 14 | expect(err).to.not.exist(); 15 | expect(server).to.be.instanceof(Hapi.Server); 16 | 17 | server.stop(done); 18 | }); 19 | 20 | }); 21 | --------------------------------------------------------------------------------