Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.DS_Store
node_modules
data
File renamed without changes.
43 changes: 43 additions & 0 deletions robin_stringer/gulpfile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
var gulp = require('gulp');
var jshint = require('gulp-jshint');
var mocha = require('gulp-mocha');
var appFiles = ['server.js', './lib/**/*.js', 'bin/**/*.js'];
var testFiles = ['test/**/*.js'];

gulp.task('mocha:test', function() {
return gulp.src(testFiles, appFiles)
.pipe(mocha({
node: true,
globals: {
describe: true,
it: true,
before: true,
after: true
}
}))
.pipe(mocha({reporter: 'nyan'}));
});

gulp.task('jshint:test', function() {
return gulp.src(testFiles)
.pipe(jshint({
node: true,
globals: {
describe: true,
it: true,
before: true,
after: true
}
}))
.pipe(jshint.reporter('default'));
});

gulp.task('jshint:app', function() {
return gulp.src(appFiles)
.pipe(jshint({
node: true
}))
.pipe(jshint.reporter('default'));
});
gulp.task('jshint', ['jshint:test', 'jshint:app']);
gulp.task('default', ['jshint']);
20 changes: 20 additions & 0 deletions robin_stringer/lib/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Routes implemented by API</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h1>Vanilla HTTP Server</h1>
<ul><a>Routes on the API</a>
<li>GET</li>
<a>/time</a>
<a>/name</a>
<li>POST</li>
<a>/greet/name</a>
</ul>

</body>
</html>
24 changes: 24 additions & 0 deletions robin_stringer/lib/router.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@

'use strict'

var fs = require('fs');
var url = require('url');

// Respond to a request to /time that will send back the current time of the server.

if(request.url === '/time' && request.method.toLowerCase() === 'get') {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end(new Date().toString());
}

// Respond to a get request to /greet/name where name is any single word string.

if(request.url === '/greet/name' && request.method.toLowerCase() === 'get') {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello ' + name + '!');
});

if(request.url === '/greet' && request.method.toLowerCase() === 'post') {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello ' + name + '!');
}
11 changes: 11 additions & 0 deletions robin_stringer/lib/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

// Create web server
var router = require(__dirname + '/lib/route');

var http = require('http');
http.createServer(function(request, response) {
homeRoute(request, response);
}).listen(3000);
console.log('Server up and running');

var server = http.createServer(function(request, res)
25 changes: 25 additions & 0 deletions robin_stringer/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "robin_stringer",
"version": "0.0.1",
"description": "Vanilla HTTP Server",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/rastringer/create_an_http_server.git"
},
"author": "ra1stringer@gmail.com",
"license": "MIT",
"bugs": {
"url": "https://github.com/rastringer/create_an_http_server/issues"
},
"homepage": "https://github.com/rastringer/create_an_http_server#readme",
"devDependencies": {
"chai": "^3.4.0",
"chai-http": "^1.0.0",
"gulp": "^3.9.0",
"jshint": "^2.8.0"
}
}
66 changes: 66 additions & 0 deletions robin_stringer/test/test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@

var chai = require('chai');
var chaihttp = require('chai-http');
chai.use(chaihttp);
var expect = chai.expect;
var fs = require('fs');
require(__dirname + '/../server');

describe('GET', function() {
before(function() {
this.indexFile = fs.readFileSync(__dirname + '/../public/index.html').toString();
});

it('should be able to get an index', function(done) {
debugger;
chai.request('localhost:3000')
.get('/')
.end(function(err, response) {
debugger;
expect(err).to.eql(null);
expect(response).to.have.status(200);
expect(response.text).to.eql(this.indexFileString);
done();
}.bind(this));
});
});

describe('GET /time', function() {
it('should send back time: (PST)', function(done) {
chai.request('localhost:3000')
.get('/time')
.end(function(err, response) {
expect(err).to.eql(null);
expect(response).to.have.status(200);
expect(response.text.split(' ').pop()).to.eql('(PST)');
done();
});
});
});

describe('GET greet/:name', function() {
it('should greet by name', function(done) {
chai.request('localhost:3000')
.get('/greet/test')
.end(function(err, response) {
expect(err).to.eql(null);
expect(response).to.have.status(200);
expect(response.text).to.eql('Hello!');
done();
});
});
});

describe('POST greet/', function() {
it('should greet your name', function(done) {
chai.request('localhost:3000')
.post('/greet')
.end(function(err, response) {
expect(err).to.eql(null);
expect(response).to.have.status(200);
expect(response.text).to.eql('Hello test!');
done();
});
});
});