瀏覽代碼

Implemented koa fortuneHandler

Edward Bramanti 10 年之前
父節點
當前提交
b2caeda07a

+ 29 - 3
frameworks/JavaScript/koa/app.js

@@ -2,6 +2,7 @@ var cluster = require('cluster')
   , numCPUs = require('os').cpus().length
   , koa = require('koa')
   , route = require('koa-route')
+  , handlebars = require('koa-handlebars')
   , bodyParser = require('koa-bodyparser')
   , override = require('koa-override')
   , mongo = require('koa-mongo');
@@ -22,12 +23,16 @@ if (cluster.isMaster) {
   app.use(mongo({
     uri: "mongodb://localhost/hello_world"
   }));
+  app.use(handlebars({
+    // needed, otherwise missing dir err
+    partialsDir: "views"
+  }));
 
   // routes
   app.use(route.get('/json', jsonHandler));
   app.use(route.get('/db', dbHandler));
   app.use(route.get('/queries', queriesHandler));
-  // app.use(route.get('/fortune', fortuneHandler));
+  app.use(route.get('/fortune', fortuneHandler));
   app.use(route.get('/update', updateHandler));
   app.use(route.get('/plaintext', textHandler));
 
@@ -58,10 +63,16 @@ if (cluster.isMaster) {
     }
   }
 
+  function *fortunesQuery() {
+    return yield function(callback) {
+        this.mongo.collection('fortune').find({}, {_id: 0}).toArray(callback);
+    }
+  }
+
   // Route handlers
 
   function *jsonHandler() {
-    this.response.body = {
+    this.body = {
       message: "Hello, world!"
     }
   }
@@ -84,6 +95,20 @@ if (cluster.isMaster) {
     this.body = yield queries;
   }
 
+  function *fortuneHandler() {
+    var fortunes = yield fortunesQuery;
+    fortunes.push({
+      id: 0,
+      message: 'Additional fortune added at request time.'
+    });
+    fortunes.sort(function(a, b) {
+      return a.id - b.id;
+    });
+    yield this.render("fortunes", {
+      fortunes: fortunes
+    });
+  }
+
   function *updateHandler() {
     var numOfUpdates = isNaN(this.query.queries) ? 1 : this.query.queries,
     queries = [];
@@ -101,5 +126,6 @@ if (cluster.isMaster) {
   function *textHandler() {
     this.body = 'Hello, world!'
   }
-  app.listen(8080); //used for local testing
+
+  app.listen(3000); //used for local testing
 }

+ 1 - 0
frameworks/JavaScript/koa/package.json

@@ -6,6 +6,7 @@
   "dependencies": {
     "koa": "0.18.1",
     "koa-bodyparser": "1.4.1",
+    "koa-handlebars": "^0.5.2",
     "koa-mongo": "^0.3.0",
     "koa-override": "1.0.0",
     "koa-route": "2.4.0",

+ 21 - 0
frameworks/JavaScript/koa/views/fortunes.hbs

@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>Fortunes</title>
+</head>
+
+<body>
+	<table>
+		<tr>
+			<th>id</th>
+			<th>message</th>
+		</tr>
+{{#fortunes}}
+		<tr>
+			<td>{{id}}</td>
+			<td>{{message}}</td>
+		</tr>
+{{/fortunes}}
+	</table>
+</body>
+</html>