video_server.js - pod4g/tool GitHub Wiki
/*
* Author: liyanfeng
*
* Date: 2016-07-11
*/
'use strict';
// 路由模块
const express = require('express');
const Utils = require('./Utils.class');
const app = express();
const router = express.Router();
const VideoModel = require('./model/VideoModel.class');
const compression = require('compression');
// const test = require('./test/test');
// API接口
const API = {
list : 'list', // 列出所有已关联的视频资源
getObject : 'getObject',// 获取指定已关联的视频资源
search : 'search', // 根据关键字搜索视频。name like '%keyword%'
getObject : 'getObject', // 根据vid获取视频资源。其实这个接口可以和list接口做成一个,参数里有id就getObject,没有就list
add : 'add', // 添加文章和视频的关联
save : 'save', // 视频资源上传阿里云oss成功之后,调用此接口把资源信息存入diaodiao_video表
setPoster : 'setPoster', // 设置视频poster图
del : 'del', // 解除文章和视频的关联
test : 'test' // 测试
};
/* 基础配置 */
// 启动压缩
app.use( compression() );
// 处理options请求。设置response对象的可允许跨域的header信息
app.use( Utils.allowCors );
// 解析request对象中的body数据。处理好之后放到request对象上的body属性上供后续使用。
app.use( Utils.bodyParse );
// 把路由挂载至应用 不以根目录开始,以根目录下的 ossvideo 目录作为路由中间件的开始匹配位置
app.use('/ossvideo',router);
router.use(Utils.bodyJSON);
const vm = new VideoModel(20);
// router.get(/(\w+)/i,requestHandler);
router.post(/(\w+)/i,requestHandler);
function requestHandler(req,res,next){
let r = {
state:'FAIL',
message:'Involid Input or Function'
};
let p = req.params[0];
let action = vm[p];
console.log('action is '+ p);
if( !action ){
console.error('[request_handler] func or data wrong');
res.json(r);
return;
}
let APIINPUT = req.APIINPUT;
let flag = checkArgs( p , APIINPUT );
console.log( 'flag ---------',flag);
// let flag = true;
if( !flag ){
r.message = "[check_args] params is illegal";
console.error("[post_fac] check_args failed");
res.json(r);
return;
}
console.log("[request_handler] using data:" + JSON.stringify(APIINPUT));
console.log("[request_handler] using pred:" + p);
action( APIINPUT )
.done( result => {
// action函数调用成功
console.error("[diaodiao_vodeo] db query success");
r.state = 'SUCCESS';
r.message = '';
r.data = result;
// 把组装好的数据返回给客户端
res.json( r );
}, error => {
// action函数调用失败
console.error("[diaodiao_video] db query fail");
r.message = "query fail: " + String( error );
// 把组装好的数据返回给客户端
res.json( r );
});
}
function checkArgs( action , input ){
let flag = false;
switch( action ){
case API.list:
// 无参数
flag = true;
break;
case API.getObject:
if( Utils.isNumeric( input.id ) )
flag = true;
break;
case API.add:
if( Utils.isNumeric( input.id ) && Array.isArray(input.revarticles) && input.revarticles.length !== 0 )
flag = true;
break;
case API.del:
if( Utils.isNumeric( input.id ) && Utils.isNumeric( input.cid ) )
flag = true;
break;
case API.search:
if( input.keyword && Utils.type( keyword ) === 'string' )
flag = true;
break;
case API.save:
if( input.name && input.url && input.uploaddate )
flag = true;
break;
case API.setPoster:
if( Utils.isNumeric( input.id ) && input.poster && Utils.type( input.poster ) === 'string')
flat = true;
break;
}
return flag;
}
app.listen(3002);