diff --git a/README.md b/README.md index 3945c152..53e609e1 100755 --- a/README.md +++ b/README.md @@ -1,93 +1,16 @@ -Assignment 2 - Short Stack: Basic Two-tier Web Application using HTML/CSS/JS and Node.js -=== - -Due: September 16th, by 11:59 PM. - -This assignment aims to introduce you to the concepts and practice involved in creating a prototype (i.e. not deployment ready) two-tiered web application. The baseline aims of this assignment involve creating an application that demonstrates the use of several specific pieces of HTML, CSS, JavaScript, and Node.js functionality. - -Baseline Requirements ---- - -Note that there is a very large range of application areas and possibilities that meet these baseline requirements. Make your application do something useful! A todo list, storing / retrieving high scores for a very simple game, have a little fun with it. - -Your application is required to implement the following functionalities: - -- a `Server` which not only serves files, but also maintains a tabular dataset with 3 or more fields related to your application -- a `Results` functionality which shows the entire dataset residing in the server's memory -- a `Form/Entry` functionality which allows a user to add, modify, or delete data items residing in the server's memory -- a `Server Logic` which, upon receiving new or modified "incoming" data, includes and uses a function that adds at least one additional derived field to this incoming data before integrating it with the existing dataset -- the `Derived field` for a new row of data must be computed based on fields already existing in the row. For example, a `todo` dataset with `task`, `priority`, and `creation_date` may generate a new field `deadline` by looking at `creation_date` and `priority` - -Your application is required to demonstrate the use of the following concepts: - -HTML: -- One or more [HTML Forms](https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms), with any combination of form tags appropriate for the user input portion of the application -- A results page displaying all data currently available on the server. You will most likely use a `` tag for this, but `
+
+
+
+
+ + + +
+
+
+
+
+ + + + + +
+
diff --git a/server.improved.js b/server.improved.js index 26673fc0..f204fea6 100644 --- a/server.improved.js +++ b/server.improved.js @@ -6,11 +6,15 @@ const http = require( 'http' ), dir = 'public/', port = 3000 -const appdata = [ - { 'model': 'toyota', 'year': 1999, 'mpg': 23 }, - { 'model': 'honda', 'year': 2004, 'mpg': 30 }, - { 'model': 'ford', 'year': 1987, 'mpg': 14} -] +// const appdata = [ +// { 'model': 'toyota', 'year': 1999, 'mpg': 23 }, +// { 'model': 'honda', 'year': 2004, 'mpg': 30 }, +// { 'model': 'ford', 'year': 1987, 'mpg': 14} +// ] + +let appdata = [ + {orderNum: 1, color: "blue", size: "small", quantity: 2} +]; const server = http.createServer( function( request,response ) { if( request.method === 'GET' ) { @@ -18,37 +22,54 @@ const server = http.createServer( function( request,response ) { }else if( request.method === 'POST' ){ handlePost( request, response ) } -}) +}); const handleGet = function( request, response ) { - const filename = dir + request.url.slice( 1 ) + const filename = dir + request.url.slice( 1 ) ; if( request.url === '/' ) { sendFile( response, 'public/index.html' ) }else{ sendFile( response, filename ) } -} +}; const handlePost = function( request, response ) { - let dataString = '' + let dataString = ''; request.on( 'data', function( data ) { - dataString += data - }) + dataString += data; + }); request.on( 'end', function() { - console.log( JSON.parse( dataString ) ) - + const json = JSON.parse(dataString); + // this request is an order + if (json.type === "order") { + const orderNum = appdata.length === 0? 1 : appdata[appdata.length - 1].orderNum + 1; + appdata.push({orderNum: orderNum, color: json.color, size: json.size, quantity: json.quantity}) + } + // this request is a fulfillment + else if (json.type === "fulfill") { + let orderNum = json.orderNum; + let i; + for (i = 0; i < appdata.length; i++) { + if (appdata[i].orderNum.toString() === orderNum) { + appdata.splice(i, 1); + } + } + } + else { + // this is an invalid request + console.log("invalid json"); + } // ... do something with the data here!!! - - response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) - response.end() + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }); + response.end(JSON.stringify(appdata)); }) -} +}; const sendFile = function( response, filename ) { - const type = mime.getType( filename ) + const type = mime.getType( filename ); fs.readFile( filename, function( err, content ) { @@ -56,17 +77,17 @@ const sendFile = function( response, filename ) { if( err === null ) { // status code: https://httpstatuses.com - response.writeHeader( 200, { 'Content-Type': type }) - response.end( content ) + response.writeHeader( 200, { 'Content-Type': type }); + response.end( content ); }else{ // file not found, error code 404 - response.writeHeader( 404 ) - response.end( '404 Error: File Not Found' ) + response.writeHeader( 404 ); + response.end( '404 Error: File Not Found' ); } }) -} +}; -server.listen( process.env.PORT || port ) +server.listen( process.env.PORT || port );