[Groonga-commit] groonga/express-kotoumi [master] Export factory method to create handler for REST API

Back to archive index

YUKI Hiroshi null+****@clear*****
Thu Jan 17 12:10:35 JST 2013


YUKI Hiroshi	2013-01-17 12:10:35 +0900 (Thu, 17 Jan 2013)

  New Revision: 6f3a8a5e35876ec4d86559c47530d0075288cd51
  https://github.com/groonga/express-kotoumi/commit/6f3a8a5e35876ec4d86559c47530d0075288cd51

  Log:
    Export factory method to create handler for REST API

  Modified files:
    lib/index.js

  Modified: lib/index.js (+23 -20)
===================================================================
--- lib/index.js    2013-01-16 17:52:48 +0900 (66c69ef)
+++ lib/index.js    2013-01-17 12:10:35 +0900 (fb64e77)
@@ -2,6 +2,26 @@ var express = require('express');
 var Connection = require('./backend-adaptor').Connection;
 var builders = require('./builders');
 
+function createRESTHandler(type, requestBuilders, responseBuilders, connection) {
+  var requestBuilder = requestBuilders[type];
+  if (!requestBuilder)
+    throw new Error('no request builder for ' + type);
+
+  var responseBuilder = responseBuilders[type];
+  if (!responseBuilder)
+    throw new Error('no response builder for ' + type);
+
+  return (function(request, response) {
+    var message = requestBuilder(request);
+    connection.emitMessage(type, message, function(responseMessage) {
+      var body = responseBuilder(responseMessage);
+      response.contentType('application/json');
+      response.send(body, 200);
+    });
+  });
+}
+exports.createRESTHandler = createRESTHandler;
+
 express.application.kotoumi = function(params) {
   params = params || {};
   var connection = params.connection || new Connection(params);
@@ -9,28 +29,11 @@ express.application.kotoumi = function(params) {
   var prefix = params.prefix || '';
   prefix = prefix.replace(/\/$/, '');
 
-  var handlersFactory = params.handlers;
-
-  function createDefaultHandler(type, connection) {
-    return (function(request, response) {
-      var builder = builders.requestInREST[type];
-      if (!builder) throw new Error('no request builder for ' + type);
-
-      var message = builder(request);
-      connection.emitMessage(type, message, function(responseMessage) {
-        var builder = builders.response[type];
-        if (!builder) throw new Error('no response builder for ' + type);
-
-        response.write(builder(responseMessage));
-      });
-    });
-  }
-
   function createHandler(type) {
-    if (handlersFactory)
-      return handlersFactory[type](connection);
+    if (params.handlers)
+      return params.handlers[type](connection);
     else
-      return createDefaultHandler(type, connection);
+      return createRESTHandler(type, builders.requestInREST, builders.response, connection);
   }
 
 //  this.get(prefix + '/status/:target', createHandler('status'));
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index