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);