UNPKG

clannad

Version:

data storage service with RESTful APIs.

287 lines (208 loc) 7.94 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _koa = require('koa'); var _koa2 = _interopRequireDefault(_koa); var _mongoose = require('mongoose'); var _mongoose2 = _interopRequireDefault(_mongoose); var _coBody = require('co-body'); var _coBody2 = _interopRequireDefault(_coBody); var _asyncBusboy = require('async-busboy'); var _asyncBusboy2 = _interopRequireDefault(_asyncBusboy); var _koaRouter = require('koa-router'); var _koaRouter2 = _interopRequireDefault(_koaRouter); var _routes = require('./routes'); var _routes2 = _interopRequireDefault(_routes); var _auth = require('./controllers/auth'); var _auth2 = _interopRequireDefault(_auth); var _table = require('./controllers/table'); var _table2 = _interopRequireDefault(_table); var _resterror = require('./services/resterror'); var _resterror2 = _interopRequireDefault(_resterror); var _file = require('./controllers/file'); var _file2 = _interopRequireDefault(_file); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var app = new _koa2.default(); var userRouters = new _koaRouter2.default(); _mongoose2.default.Promise = _promise2.default; app.use(function () { var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(ctx, next) { var start, getBody, _ref, files, fields, status, name, message, errors, ms; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: start = new Date(); ctx.type = 'json'; _context2.prev = 2; if (!(ctx.method === 'OPTIONS')) { _context2.next = 7; break; } _context2.next = 6; return _auth2.default.setCORS(ctx, true); case 6: return _context2.abrupt('return', ctx.status = 200); case 7: // 直接解析出post参数, 这里的co-body 的 parse 总是有神奇的 bug getBody = function () { var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() { var type; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: type = ctx.headers['content-type']; if (!(type.indexOf('application/json') > -1)) { _context.next = 10; break; } _context.next = 4; return _coBody2.default.json(ctx); case 4: _context.t0 = _context.sent; if (_context.t0) { _context.next = 7; break; } _context.t0 = {}; case 7: ctx.req.body = _context.t0; _context.next = 25; break; case 10: if (!(type.indexOf('application/x-www-from-urlencoded') > -1)) { _context.next = 19; break; } _context.next = 13; return _coBody2.default.form(ctx); case 13: _context.t1 = _context.sent; if (_context.t1) { _context.next = 16; break; } _context.t1 = {}; case 16: ctx.req.body = _context.t1; _context.next = 25; break; case 19: _context.next = 21; return (0, _coBody2.default)(ctx); case 21: _context.t2 = _context.sent; if (_context.t2) { _context.next = 24; break; } _context.t2 = {}; case 24: ctx.req.body = _context.t2; case 25: case 'end': return _context.stop(); } } }, _callee, undefined); })); return function getBody() { return ref.apply(this, arguments); }; }(); if (!ctx.request.is('multipart/*')) { _context2.next = 18; break; } _context2.next = 11; return (0, _asyncBusboy2.default)(ctx.req, { autoFields: true }); case 11: _ref = _context2.sent; files = _ref.files; fields = _ref.fields; ctx.req.body = fields; ctx.req.files = files; _context2.next = 21; break; case 18: if (!(ctx.method !== 'GET' && ctx.method !== 'OPTIONS')) { _context2.next = 21; break; } _context2.next = 21; return getBody(); case 21: _context2.next = 23; return next(); case 23: if (!ctx.body) { _context2.next = 27; break; } ctx.status = 200; _context2.next = 32; break; case 27: if (!ctx.params) { _context2.next = 31; break; } ctx.status = 204; // 处理报错情况 _context2.next = 32; break; case 31: throw new _resterror2.default(ctx.status, 'ROUTER_ERR', ctx.response.message); case 32: _context2.next = 43; break; case 34: _context2.prev = 34; _context2.t0 = _context2['catch'](2); process.stderr.write(_context2.t0.stack + '\n'); status = _context2.t0.status; name = _context2.t0.name; message = _context2.t0.message; errors = _context2.t0.errors; ctx.status = status || 500; if (name) ctx.body = { name: name, message: message, errors: errors }; case 43: ms = new Date() - start; process.stderr.write(ctx.method + ' ' + ctx.url + ' - ' + ms + 'ms\n'); case 45: case 'end': return _context2.stop(); } } }, _callee2, undefined, [[2, 34]]); })); return function (_x, _x2) { return ref.apply(this, arguments); }; }()); app.use(_routes2.default.routes()); app.use(userRouters.routes()); exports.default = { app: app, auth: function auth(callback) { var name = arguments.length <= 1 || arguments[1] === undefined ? 'REST' : arguments[1]; _auth2.default.name = name; _auth2.default.check = callback; }, configDB: function configDB(callback) { callback(_mongoose2.default); }, configIO: function configIO(config) { _file2.default.config = config; }, router: userRouters }; module.exports = exports['default'];