From 91edde840599b2fa310be3f9127e3f025c1a0e9b Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Wed, 18 May 2016 21:47:01 -0700 Subject: [PATCH 01/12] post request working, basic server setup --- .gitignore | 2 ++ promise.js | 3 +++ server.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ test/server-test.js | 0 4 files changed, 49 insertions(+) create mode 100644 .gitignore create mode 100644 promise.js create mode 100644 server.js create mode 100644 test/server-test.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..705c0f7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/node_modules +/notes diff --git a/promise.js b/promise.js new file mode 100644 index 0000000..37ebdd2 --- /dev/null +++ b/promise.js @@ -0,0 +1,3 @@ +module.exports = function() { + +} diff --git a/server.js b/server.js new file mode 100644 index 0000000..07177cf --- /dev/null +++ b/server.js @@ -0,0 +1,44 @@ +'use strict' + +const http = require('http'); +const fs = require('fs'); +const Writable = require('stream').Writable; +const Readable = require('stream').Readable; + +http.createServer((req, res) => { + if (req.method === 'GET' && req.url === '/') { + let dataString = ''; + req.on('data', (data) => { + dataString += data.toString(); + }) + req.on('end', () => { + let dataStream = Readable; + // file.write(dataString); + // dataStream.write(dataString); + dataStream.pipe(file); + res.status = 200; + res.end('File saved successfully'); + }) + } + + if (req.method === 'POST' && req.url === '/notes') { + let files = fs.readdir(__dirname + '/notes', (err, files) => { + if (err) { + res.status = 404; + res.end('Error occurred: ', err); + } + files.forEach((file) => { + res.write(file + '\n') + }) + res.end(); + }) + } + + else { + res.status = 404; + res.end('Not found'); + } + +}).listen(3000, () => { + console.log('listening on port 3000'); +}) diff --git a/test/server-test.js b/test/server-test.js new file mode 100644 index 0000000..e69de29 From 2afa6d4016f4271c011a9c72fafa341d81da9fb4 Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Wed, 18 May 2016 21:48:51 -0700 Subject: [PATCH 02/12] get request was labeled as post accidentally --- server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.js b/server.js index 07177cf..0bee844 100644 --- a/server.js +++ b/server.js @@ -6,7 +6,7 @@ const Writable = require('stream').Writable; const Readable = require('stream').Readable; http.createServer((req, res) => { - if (req.method === 'GET' && req.url === '/') { + if (req.method === 'POST') { let dataString = ''; req.on('data', (data) => { dataString += data.toString(); @@ -21,7 +21,7 @@ http.createServer((req, res) => { }) } - if (req.method === 'POST' && req.url === '/notes') { + if (req.method === 'GET' && req.url === '/notes') { let files = fs.readdir(__dirname + '/notes', (err, files) => { if (err) { res.status = 404; From 0bab12f76649acdabdae5a8510c6b846924ca603 Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Wed, 18 May 2016 21:53:10 -0700 Subject: [PATCH 03/12] added gulpfile and package.json --- gulpfile.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 34 +++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 gulpfile.js create mode 100644 package.json diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..ac4cee7 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,65 @@ +'use strict'; + +const gulp = require('gulp'); +const mocha = require('gulp-mocha'); +const lint = require('gulp-eslint'); +const opts = { + 'extends': 'eslint:recommended', + 'ecmaFeatures': { + 'modules': true + }, + 'rules': { + 'no-alert': 0, + 'no-bitwise': 0, + 'camelcase': 1, + 'no-console': 1, + 'curly': 1, + 'eqeqeq': 0, + 'no-eq-null': 0, + 'guard-for-in': 1, + 'no-empty': 1, + 'no-use-before-define': 0, + 'no-obj-calls': 2, + 'no-unused-vars': 0, + 'new-cap': 1, + 'no-shadow': 0, + 'strict': 1, + 'no-invalid-regexp': 2, + 'comma-dangle': 2, + 'no-undef': 1, + 'no-new': 1, + 'no-extra-semi': 1, + 'no-debugger': 2, + 'no-caller': 1, + 'semi': 1, + 'quotes': 0, + 'no-unreachable': 2 + }, + 'globals': { + '$': false + }, + 'env': { + 'node': true, + 'es6': true + } +}; + +gulp.task('linter' , () => { + return gulp.src('./**/*.js') + .pipe(lint(opts)) + .pipe(lint.format()); +}); + +gulp.task('tests', () => { + return gulp.src('./test/server-test.js', {read: false}) + .pipe(mocha({reporter: 'spec'})); +}); + +gulp.task('watch', () => { + gulp.watch('./test/server-test.js', ['linter', 'tests']); + gulp.watch('./**/*.js', ['linter']); +}); + +gulp.task('default', ['watch', 'linter', 'tests'], () => { + console.log('All tasks completed successfully'); +}); diff --git a/package.json b/package.json new file mode 100644 index 0000000..d46a076 --- /dev/null +++ b/package.json @@ -0,0 +1,34 @@ +{ + "name": "stefanie-hansen", + "version": "1.0.0", + "description": "##To Submit this Assignment * fork this repository * write all of your code in a folder containing your name * push to your repository * submit a pull request to this repository * submit a link to your PR in canvas", + "main": "server.js", + "directories": { + "test": "test" + }, + "dependencies": { + }, + "devDependencies": { + "chai": "^3.5.0", + "chai-http": "^2.0.1", + "gulp": "^3.9.1", + "gulp-eslint": "^2.0.0", + "gulp-mocha": "^2.2.0", + "mocha": "^2.4.5" + }, + "scripts": { + "test": "mocha", + "start": "node server.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/stefuhnee/simple_http_with_persistence.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/stefuhnee/simple_http_with_persistence/issues" + }, + "homepage": "https://github.com/stefuhnee/simple_http_with_persistence#readme" +} From 821f609752ad440e74819c4cd41c125a0023435c Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Wed, 18 May 2016 21:55:18 -0700 Subject: [PATCH 04/12] added dependencies for tests --- test/server-test.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/server-test.js b/test/server-test.js index e69de29..b00cdff 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -0,0 +1,8 @@ +'use strict'; + +const chai = require('chai'); +const expect = require('chai').expect; +const chaiHTTP = require('chai-http'); +chai.use(chaiHTTP); +const request = chai.request; +require('../http_server.js'); From 067577110470059e743f9f2dc9dffc529da5787b Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Wed, 18 May 2016 22:07:23 -0700 Subject: [PATCH 05/12] working on post request --- .gitignore | 1 - promise.js | 5 +++-- server.js | 26 ++++++++++++++++---------- test/server-test.js | 2 +- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 705c0f7..07e6e47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ /node_modules -/notes diff --git a/promise.js b/promise.js index 37ebdd2..d0e1f2a 100644 --- a/promise.js +++ b/promise.js @@ -1,3 +1,4 @@ +'use strict'; + module.exports = function() { - -} +}; diff --git a/server.js b/server.js index 0bee844..d70d915 100644 --- a/server.js +++ b/server.js @@ -1,24 +1,30 @@ -'use strict' +'use strict'; const http = require('http'); const fs = require('fs'); const Writable = require('stream').Writable; const Readable = require('stream').Readable; +const fileArr = []; http.createServer((req, res) => { - if (req.method === 'POST') { + if (req.method === 'POST' && req.url === '/notes') { let dataString = ''; req.on('data', (data) => { dataString += data.toString(); - }) + }); req.on('end', () => { - let dataStream = Readable; + fileArr.push(dataString); + let fileStream = fs.createWriteStream(__dirname + '/notes/note' + fileArr.indexOf(dataString)); + fileStream.write(dataString); + console.log(fileStream); + console.log(fileArr); + // let dataStream = Readable; // file.write(dataString); // dataStream.write(dataString); - dataStream.pipe(file); + // dataStream.pipe(file); res.status = 200; res.end('File saved successfully'); - }) + }); } if (req.method === 'GET' && req.url === '/notes') { @@ -28,10 +34,10 @@ http.createServer((req, res) => { res.end('Error occurred: ', err); } files.forEach((file) => { - res.write(file + '\n') - }) + res.write(file + '\n'); + }); res.end(); - }) + }); } else { @@ -41,4 +47,4 @@ http.createServer((req, res) => { }).listen(3000, () => { console.log('listening on port 3000'); -}) +}); diff --git a/test/server-test.js b/test/server-test.js index b00cdff..72cf7ad 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -5,4 +5,4 @@ const expect = require('chai').expect; const chaiHTTP = require('chai-http'); chai.use(chaiHTTP); const request = chai.request; -require('../http_server.js'); +require('../server.js'); From 229e9b058ee23265bd5543d3c0a6033e57655d06 Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Wed, 18 May 2016 22:14:43 -0700 Subject: [PATCH 06/12] post request working except overwriting the same file --- server.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/server.js b/server.js index d70d915..212ca05 100644 --- a/server.js +++ b/server.js @@ -14,29 +14,24 @@ http.createServer((req, res) => { }); req.on('end', () => { fileArr.push(dataString); - let fileStream = fs.createWriteStream(__dirname + '/notes/note' + fileArr.indexOf(dataString)); + let fileStream = fs.createWriteStream(__dirname + '/data/note' + fileArr.indexOf(dataString)); fileStream.write(dataString); console.log(fileStream); - console.log(fileArr); - // let dataStream = Readable; - // file.write(dataString); - // dataStream.write(dataString); - // dataStream.pipe(file); res.status = 200; - res.end('File saved successfully'); + return res.end('File saved successfully'); }); } if (req.method === 'GET' && req.url === '/notes') { - let files = fs.readdir(__dirname + '/notes', (err, files) => { + let files = fs.readdir(__dirname + '/data', (err, files) => { if (err) { res.status = 404; - res.end('Error occurred: ', err); + return res.end('Error occurred: ', err); } files.forEach((file) => { res.write(file + '\n'); }); - res.end(); + return res.end(); }); } From a005e274d4dd606afc092873a4d86b04b185d295 Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Thu, 19 May 2016 09:05:57 -0700 Subject: [PATCH 07/12] files being saved with correct names --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index 212ca05..c594c3a 100644 --- a/server.js +++ b/server.js @@ -14,7 +14,7 @@ http.createServer((req, res) => { }); req.on('end', () => { fileArr.push(dataString); - let fileStream = fs.createWriteStream(__dirname + '/data/note' + fileArr.indexOf(dataString)); + let fileStream = fs.createWriteStream(__dirname + '/data/note' + fileArr.length); fileStream.write(dataString); console.log(fileStream); res.status = 200; From 750a172b8363cbcff7bd88811372c801d2acd1f3 Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Thu, 19 May 2016 10:36:58 -0700 Subject: [PATCH 08/12] playing around with .json vs .txt... .json doesn't work --- server.js | 12 +++++------- test/server-test.js | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/server.js b/server.js index c594c3a..e91375f 100644 --- a/server.js +++ b/server.js @@ -2,8 +2,6 @@ const http = require('http'); const fs = require('fs'); -const Writable = require('stream').Writable; -const Readable = require('stream').Readable; const fileArr = []; http.createServer((req, res) => { @@ -14,9 +12,9 @@ http.createServer((req, res) => { }); req.on('end', () => { fileArr.push(dataString); - let fileStream = fs.createWriteStream(__dirname + '/data/note' + fileArr.length); - fileStream.write(dataString); - console.log(fileStream); + // not working with .json extension for some weird reason + let fileName = __dirname + '/data/note' + fileArr.length + '.txt'; + fs.writeFileSync(fileName, dataString); res.status = 200; return res.end('File saved successfully'); }); @@ -25,7 +23,7 @@ http.createServer((req, res) => { if (req.method === 'GET' && req.url === '/notes') { let files = fs.readdir(__dirname + '/data', (err, files) => { if (err) { - res.status = 404; + res.status = 400; return res.end('Error occurred: ', err); } files.forEach((file) => { @@ -37,7 +35,7 @@ http.createServer((req, res) => { else { res.status = 404; - res.end('Not found'); + return res.end('Not found'); } }).listen(3000, () => { diff --git a/test/server-test.js b/test/server-test.js index 72cf7ad..30f7a11 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -6,3 +6,45 @@ const chaiHTTP = require('chai-http'); chai.use(chaiHTTP); const request = chai.request; require('../server.js'); + +describe('HTTP server with persistence tests', () => { + it('should respond to a GET request to /notes without errors', (done) => { + request('localhost:3000') + .get('/notes') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + done(); + }); + }); + it('should respond to a POST request to /notes without errors', (done) => { + request('localhost:3000') + .post('/notes') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + done(); + }); + }); + it('should respond to request to any path besides /notes with a 404 status', (done) => { + request('localhost:3000') + .get('/random') + .end((err, res) => { + expect(res).to.have.status(404); + expect(res.text).to.eql('Not found'); + done(); + }); + }); + it('should respond to a GET request with a list of files', (done) => { + request('localhost:3000') + .get('/notes') + .end((err, res) => { + let file = res.text.trim(); + if (res.text.lastIndexOf('\n') !== res.text.indexOf('\n')) { + file = res.text.split('\n').pop().trim(); + } + expect(file.endsWith('.txt')).to.eql(true); + done(); + }); + }); +}); From e5947c267334a5d8b6adf017465704f1ca0b31ca Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Thu, 19 May 2016 10:53:40 -0700 Subject: [PATCH 09/12] tests passing --- server.js | 8 ++++---- test/server-test.js | 9 ++++----- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/server.js b/server.js index e91375f..04e5231 100644 --- a/server.js +++ b/server.js @@ -15,15 +15,15 @@ http.createServer((req, res) => { // not working with .json extension for some weird reason let fileName = __dirname + '/data/note' + fileArr.length + '.txt'; fs.writeFileSync(fileName, dataString); - res.status = 200; + res.statusCode = 200; return res.end('File saved successfully'); }); } - if (req.method === 'GET' && req.url === '/notes') { + else if (req.method === 'GET' && req.url === '/notes') { let files = fs.readdir(__dirname + '/data', (err, files) => { if (err) { - res.status = 400; + res.statusCode = 400; return res.end('Error occurred: ', err); } files.forEach((file) => { @@ -34,7 +34,7 @@ http.createServer((req, res) => { } else { - res.status = 404; + res.statusCode = 404; return res.end('Not found'); } diff --git a/test/server-test.js b/test/server-test.js index 30f7a11..f0b6e19 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -23,12 +23,13 @@ describe('HTTP server with persistence tests', () => { .end((err, res) => { expect(err).to.eql(null); expect(res).to.have.status(200); + expect(res.text).to.eql('File saved successfully'); done(); }); }); it('should respond to request to any path besides /notes with a 404 status', (done) => { request('localhost:3000') - .get('/random') + .get('/TEST') .end((err, res) => { expect(res).to.have.status(404); expect(res.text).to.eql('Not found'); @@ -39,10 +40,8 @@ describe('HTTP server with persistence tests', () => { request('localhost:3000') .get('/notes') .end((err, res) => { - let file = res.text.trim(); - if (res.text.lastIndexOf('\n') !== res.text.indexOf('\n')) { - file = res.text.split('\n').pop().trim(); - } + let file = res.text.trim().split('\n').pop(); + console.log('file', file) expect(file.endsWith('.txt')).to.eql(true); done(); }); From ce2e0b695786f580b8d936ca8eae9d2f4a627c06 Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Thu, 19 May 2016 11:30:32 -0700 Subject: [PATCH 10/12] tests working, .json files work now --- .gitignore | 1 + promise.js | 1 + server.js | 5 ++--- test/server-test.js | 27 ++++++++++++++++++++++----- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 07e6e47..bb3be50 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /node_modules +/data diff --git a/promise.js b/promise.js index d0e1f2a..61e28a8 100644 --- a/promise.js +++ b/promise.js @@ -1,4 +1,5 @@ 'use strict'; module.exports = function() { + }; diff --git a/server.js b/server.js index 04e5231..1a568d1 100644 --- a/server.js +++ b/server.js @@ -2,7 +2,7 @@ const http = require('http'); const fs = require('fs'); -const fileArr = []; +const fileArr = fs.readdirSync(__dirname + '/data'); http.createServer((req, res) => { if (req.method === 'POST' && req.url === '/notes') { @@ -12,8 +12,7 @@ http.createServer((req, res) => { }); req.on('end', () => { fileArr.push(dataString); - // not working with .json extension for some weird reason - let fileName = __dirname + '/data/note' + fileArr.length + '.txt'; + let fileName = __dirname + '/data/note' + fileArr.length + '.json'; fs.writeFileSync(fileName, dataString); res.statusCode = 200; return res.end('File saved successfully'); diff --git a/test/server-test.js b/test/server-test.js index f0b6e19..78444a0 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -5,9 +5,16 @@ const expect = require('chai').expect; const chaiHTTP = require('chai-http'); chai.use(chaiHTTP); const request = chai.request; +const fs = require('fs'); +let oldFiles = []; +let newFiles = []; require('../server.js'); describe('HTTP server with persistence tests', () => { + before('read original list of files in data directory', (done) => { + oldFiles = fs.readdirSync('/Users/Stefanie/cf/401/week-2/class-03/stefanie-hansen/data'); + done(); + }); it('should respond to a GET request to /notes without errors', (done) => { request('localhost:3000') .get('/notes') @@ -15,17 +22,18 @@ describe('HTTP server with persistence tests', () => { expect(err).to.eql(null); expect(res).to.have.status(200); done(); - }); + }); }); it('should respond to a POST request to /notes without errors', (done) => { request('localhost:3000') .post('/notes') + .send({"test":"test"}) .end((err, res) => { expect(err).to.eql(null); expect(res).to.have.status(200); expect(res.text).to.eql('File saved successfully'); done(); - }); + }); }); it('should respond to request to any path besides /notes with a 404 status', (done) => { request('localhost:3000') @@ -34,15 +42,24 @@ describe('HTTP server with persistence tests', () => { expect(res).to.have.status(404); expect(res.text).to.eql('Not found'); done(); - }); + }); }); it('should respond to a GET request with a list of files', (done) => { request('localhost:3000') .get('/notes') .end((err, res) => { let file = res.text.trim().split('\n').pop(); - console.log('file', file) - expect(file.endsWith('.txt')).to.eql(true); + expect(file.endsWith('.json')).to.eql(true); + done(); + }); + }); + it('should should create a file with a POST request to /notes', (done) => { + request('localhost:3000') + .post('/notes') + .send({"test":"test"}) + .end((err, res) => { + newFiles = fs.readdirSync('/Users/Stefanie/cf/401/week-2/class-03/stefanie-hansen/data'); + expect(oldFiles.length).to.be.below(newFiles.length); done(); }); }); From 9925ca0c1a308eabb43a7caaa44a620cdb35f923 Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Thu, 19 May 2016 11:45:08 -0700 Subject: [PATCH 11/12] shortened pathnames --- test/server-test.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/test/server-test.js b/test/server-test.js index 78444a0..ce9818f 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -11,9 +11,8 @@ let newFiles = []; require('../server.js'); describe('HTTP server with persistence tests', () => { - before('read original list of files in data directory', (done) => { - oldFiles = fs.readdirSync('/Users/Stefanie/cf/401/week-2/class-03/stefanie-hansen/data'); - done(); + before('read original list of files in data directory', () => { + oldFiles = fs.readdirSync(__dirname + '/../data'); }); it('should respond to a GET request to /notes without errors', (done) => { request('localhost:3000') @@ -27,7 +26,6 @@ describe('HTTP server with persistence tests', () => { it('should respond to a POST request to /notes without errors', (done) => { request('localhost:3000') .post('/notes') - .send({"test":"test"}) .end((err, res) => { expect(err).to.eql(null); expect(res).to.have.status(200); @@ -58,7 +56,7 @@ describe('HTTP server with persistence tests', () => { .post('/notes') .send({"test":"test"}) .end((err, res) => { - newFiles = fs.readdirSync('/Users/Stefanie/cf/401/week-2/class-03/stefanie-hansen/data'); + newFiles = fs.readdirSync(__dirname + '/../data'); expect(oldFiles.length).to.be.below(newFiles.length); done(); }); From 83826e4f86acc153887738801b59533883c1889f Mon Sep 17 00:00:00 2001 From: Stefanie Hansen Date: Thu, 19 May 2016 11:52:21 -0700 Subject: [PATCH 12/12] didn't have time for promises --- promise.js | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 promise.js diff --git a/promise.js b/promise.js deleted file mode 100644 index 61e28a8..0000000 --- a/promise.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = function() { - -};