UNPKG

visop

Version:

A simple CLI for scaffolding visible operation projects.

239 lines (216 loc) 8.68 kB
// 加载API模块 var express = require('express'); var url = require('url') var _ = require('lodash') // var invalidPackage = require('./invalidPackage') var setting = require('../config/setting'); var path = require('path') var moment = require('moment') module.exports = function(app){ router = express.Router(); //批量配置路由-z router = require('./config-route')(router); var visopHooks = {}; // 元素触发的钩子函数,定义在用户代码目录 var visopPath = "" require('./json-server')(router, visopHooks); // console.log('visopPath',visopPath) app.use((req, res, next) => { // 保证在send之后还能继续处理数据,重要 var resSend = res.send res.send = function(){ resSend.apply(this,arguments); next(); } // res.jsonp = res._jsonp try{ // console.log('before............', req.path, req) var temp = parsePath(req); var configName = temp.configName; var tableName = temp.tableName; if(!visopHooks[configName]){ return next() } if(req.body){ if(req.method == "POST"){ req.body.createdAt = moment().format("YYYY-MM-DD HH:mm:ss") req.body.updatedAt = moment().format("YYYY-MM-DD HH:mm:ss") }else{ req.body.updatedAt = moment().format("YYYY-MM-DD HH:mm:ss") } } if(req.method == "GET"){ if(req.query._order == null){ // console.log('1111111111111') req.query._order = "desc,desc" }; if(req.query._sort == null){ // console.log('22222222222') req.query._sort = "updatedAt,createdAt" }; } // console.log('333333333333333', req.query) if(req.body && req.body.__doexecute){ console.log('doexecute', req.body) if(visopHooks[configName][req.body.id]){ visopHooks[configName][req.body.id](req, res, function(err, data){ if(err){ return next(err) } }) } return next("EXECUTE") } // if(req.baseUrl.replace('/','') == ) if(visopHooks[configName]["beforeAll"]){ visopHooks[configName]["beforeAll"](req, function(err, data){ if(err){ return next(err) } }) } var httpMethods = ["GET","POST","PATCH","DELETE","ALL"] var tableNames = ["meta",'data','fields','actions'] var tempName; for(var i=0;i<httpMethods.length;i++){ if(req.method == httpMethods[i]){ for(var j=0;j<tableNames.length;j++){ tempName = _.camelCase('before'+_.upperFirst(_.lowerCase(httpMethods[i]))+_.upperFirst(_.lowerCase(tableNames[j]))) console.log('tempName:',tempName) if(visopHooks[configName][tempName]){ visopHooks[configName][tempName](req, function(err, data){ if(err){ return next(err) } }) } } } } if(tableName != "data"){ // 只有操作data才触发钩子函数 return next() } if(req.method == "POST"){ // console.log('req.body', req.body, visopHooks[configName]["beforeAdd"]) if(visopHooks[configName]["beforeAdd"]){ visopHooks[configName]["beforeAdd"](req.body, function(err, data){ if(err){ return next(err) } }) } } if(req.method == "PATCH"){ if(visopHooks[configName]["beforeUpdate"]){ visopHooks[configName]["beforeUpdate"](req.params.id, req.body, function(err, data){ if(err){ return next(err) } }) } } if(req.method == "DELETE"){ if(visopHooks[configName]["beforeDelete"]){ visopHooks[configName]["beforeDelete"](req.params.id, req.body, function(err, data){ if(err){ return next(err) } }) } } }catch(e){ console.log('error:',e); return next(e) } return next() }) app.use(router) app.use(function(req, res, next){ // console.log('after route ...', req) // console.log('after router') try{ // console.log('after............', req.originalUrl) // var visopHook = require("") // if(!req.visop || !req.visop.configName){ // return; // } var temp = parsePath(req); var configName = temp.configName; var tableName = temp.tableName; // if(!visopHooks[configName]){ // return next() // } // console.log('configName is:', temp) if(temp.tableName != 'data'){ // 只有操作data才触发钩子函数 return next() } if(req.method == "POST"){ // console.log('req.body', req.body, visopHooks[configName]["beforeAdd"]) if(visopHooks[configName] && visopHooks[configName]["afterAdd"]){ visopHooks[configName]["afterAdd"](req.body, function(err, data){ if(err){ // return next(err) } }) } } if(req.method == "PATCH"){ if(visopHooks[configName] && visopHooks[configName]["afterUpdate"]){ if(req.body.__fromElement){ delete req.body.__fromElement } visopHooks[configName]["afterUpdate"](req.params.id, req.body, function(err, data){ if(err){ // return next(err) } }) } } if(req.method == "DELETE"){ if(visopHooks[configName] && visopHooks[configName]["afterDelete"]){ visopHooks[configName]["afterDelete"](req.params.id, req.body, function(err, data){ if(err){ // return next(err) } }) } } // if(req.baseUrl.replace('/','') == ) if(visopHooks[configName] && visopHooks[configName]["afterAll"]){ console.log('before setTimeout',Date.now()) // 加个延迟时间,保证文件已经写入后才触发后续操作 // setTimeout(function(){ console.log(Date.now()) visopHooks[configName]["afterAll"](req, function(err, data){ if(err){ // return next(err) } }) // },200) } }catch(e){ console.log('error:',e); } next() }) } function afterRoute(req, res, next){ // return next() } // 从url里获取json名称和表名称 function parsePath(req){ var result = { configName:"", tableName: "" } var temp = url.parse(req.originalUrl).pathname; temp = temp.split('/') if(temp.length>1){ result.configName = temp[1]; } if(temp.length>2){ result.tableName = temp[2]; } return result; }