// ROUTES FOR OUR API // ============================================================================= var express = require('express'); var router = express.Router(); // get an instance of the express Router const querystring = require('querystring'); var mysql = require('./mysql'); const _mysqlLabor = ["172.16.12.5", "cuhkjc_query"]; //query數據庫信息 //統壹處理區域 router.use(async function (req, res, next) { //权限设置 - 登陆 验证码 await asynnext(req, res, next); //// make sure we go to the next routes and don't stop here //res.end(""); }); /** * @des 參數解釋同上 */ function asynnext(req, res, next) { //異步處理 return new Promise(async (resolve, reject) => { next(); //resolve(true); }); } //指定用户访问 CocoBlockly 的行为 router.route('/history').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, 0, "history"]; postmysql(req, res, "blockly_history", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_history_get", req.params.username, "history") }); //指定用户在 CocoBlockly 停留的总时间(离开的时候请求) router.route('/duration').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, req.body.time, "duration"]; postmysql(req, res, "blockly_duration", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_duration_get", req.params.username, "duration") }); //指定用户打开实验室的行为 router.route('/labs').post((req, res, next) => { postmysql(req, res, "blockly_labs"); }).get((req, res, next) => { getmysql(req, res, "blockly_labs_get") }); //指定用户打开某个样例的行为 router.route('/examples').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "example", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_examples", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_examples_get", req.body.username, "example"); }); //指定用户切换上传模式的行为 router.route('/mode_switch').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "modeswitch", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_mode_switch", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_mode_switch_get", req.body.username, "modeswitch"); }); //指定用户点击串口监视窗按钮的行为 router.route('/serial_monitor').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "serialmonitor", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_serial_monitor", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_serial_monitor_get", req.body.username, "serialmonitor"); }); //指定用户点击复制源代码的行为 router.route('/copy').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "copy", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_copy", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_copy_get", req.body.username, "copy"); }); //指定用户点击运行的行为 router.route('/upload_area/run').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "run", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_upload_area_run", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_upload_area_run_get", req.body.username, "run"); }); //指定用户点击上传的行为 router.route('/upload_area/upload').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "upload", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_upload_area_upload", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_upload_area_upload_get", req.body.username, "upload") }); //指定用户在 Blockly 中弹出错误信息的行为(并报错错误信息) router.route('/upload_area/errormsg').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "errormsg", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_upload_area_errormsg", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_upload_area_errormsg_get", req.body.username, "errormsg") }); //指定用户将积木拖入编程区域的行为 router.route('/blocks/to_workspace').post((req, res, next) => { postmysql(req, res, "blockly_blocks_to_workspace"); }).get((req, res, next) => { getmysql(req, res, "blockly_blocks_to_workspace_get") }); //指定用户将积木拖入编程区域的行为 router.route('/blocks/out_workspace').post((req, res, next) => { postmysql(req, res, "blockly_blocks_out_workspace"); }).get((req, res, next) => { getmysql(req, res, "blockly_blocks_out_workspace_get") }); //指定用户导出文件的行为 router.route('/files/local_export').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "local_export", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_files_local_export", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_files_local_export_get", req.body.username, "local_export") }); //指定用户导入文件的行为 router.route('/files/local_import').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "local_import", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_files_local_import", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_files_local_import_get", req.body.username, "local_export") }); //指定用户创建指定云端文件的行为 router.route('/files/cloud_create').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "cloud", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_files_cloud_create", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_files_cloud_create_get", req.body.username, "cloudcreate"); }); //指定用户更新指定云端文件的行为 router.route('/files/cloud_update').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "cloud", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_files_cloud_update", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_files_cloud_update_get", req.body.username, "cloudupdate"); }); //指定用户打开指定云端文件的行为 router.route('/files/cloud_open').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "cloud", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_files_cloud_open", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_files_cloud_open_get", req.body.username, "cloudopen"); }); //指定用户删除指定云端文件的行为 router.route('/files/cloud_delete').post((req, res, next) => { var _arr = [req.body.userid, req.body.username, "cloud", req.body.eventname, req.body.eventcontent]; postmysql(req, res, "blockly_files_cloud_delete", _arr); }).get((req, res, next) => { getmysql(req, res, "blockly_files_cloud_delete_get", req.body.username, "clouddelete"); }); queryString = function (url) { var a = url.split("?"); var json = querystring.parse(a[1]) return json; } //post存儲過程處理 postmysql = function (req, res, functionname, arr) { //mode的處理 arr.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(arr, function (ret) { res.end(JSON.stringify(ret)); }); } //get獲取數據庫信息 getmysql = function (req, res, functionname, ...p) { p = p || []; p.unshift(_mysqlLabor[0], _mysqlLabor[1], functionname); //執行存儲過程 mysql.usselect(p, function (ret) { res.end(JSON.stringify(ret)); }); } module.exports = router;