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