UNPKG

lazo-next

Version:

A client-server web framework built on Node.js that allows front-end developers to easily create a 100% SEO compliant, component MVC structured web application with an optimized first page load.

106 lines (97 loc) 3.99 kB
define(['utils/modelLoader', 'context'], function (modelLoader, Context) { 'use strict'; return function (req, reply) { var handleTunnelError = function (req, response) { var respText = response.body || response.error || ''; var resp = reply(respText); resp.code(response.statusCode || 500); }; var method = req.payload.method; if (method === 'GET') { var loadFunc, loadName; if (req.payload.model) { loadFunc = LAZO.app.loadModel; loadName = req.payload.model; } else if (req.payload.collection) { loadFunc = LAZO.app.loadCollection; loadName = req.payload.collection; } loadFunc.call(LAZO.app, loadName, { ctx: new Context(), params: req.payload.params, success: function (model) { reply({ gmid: model._getGlobalId(), data: model.toJSON() }); }, error: function (model, response, options) { LAZO.logger.error('[server.handlers.tunnel] Loading %s, error processing request %j', loadName, response); handleTunnelError(req, response); } } ); } else if (method === 'POST' || method === 'PUT' || method === 'DELETE' || method === 'NONCRUD') { var type, modelName, payload = req.payload; if (payload.model) { type = 'model'; modelName = payload.model; } else if (payload.collection) { type = 'collection'; modelName = payload.collection; } var _handleModel = function (Model) { var m = new Model(payload.attributes, { name: modelName, ctx: new Context(), params: payload.params, parse: true }); if (method === 'DELETE') { m.destroy({ success: function (model, response, options) { reply({ gmid: model._getGlobalId(), data: model.toJSON() }); }, error: function (model, response, options) { handleTunnelError(req, response); } }); } else if (method === 'NONCRUD') { var fname = payload.fname, args = payload.args; m.call(fname, args, { success: function (response) { reply(response); }, error: function (response) { handleTunnelError(req, response); } }); } else { m.save({}, { success: function (model, response, options) { reply({ gmid: model._getGlobalId(), data: model.toJSON() }); }, error: function (model, response, options) { handleTunnelError(req, response); } }); } }; modelLoader(modelName, type, _handleModel); } else { LAZO.logger.debug('[server.handlers.tunnel] Error processing request method %s', method); var resp = req.reply({ error: 'Error processing request method: ' + method }); resp.code(500); } }; });