node.js web框架
2020/12/17
posted in
客户端
2020/12/17
posted in
客户端
有个小服务,需要使用node.js运行,需要提供一个后台给运营人员使用,故使用node web框架来搭建。Egg.js是不错的选择,不过服务不需要那么大型,所以采用koa快速开发
// web框架
const Koa = require('koa');
// 路由
const router = require('koa-router')();
// 运行系统shell脚本
const shelljs = require('shelljs');
// http请求
const koaBody = require('koa-body');
// 文件操作
const fs = require('fs');
// 路径相关
const path = require("path");
// 静态资源服务器
const static = require('koa-static');
// zip压缩与解压
// const AdmZip = require('adm-zip');
// 支付中文版的adm-zip
const AdmZip = require('adm-zip-iconv');
router.get('/test', async (ctx, next) => {
console.log(ctx.response);
ctx.response.body = '<h1>test</h1>';
});
// 导航
router.post('/nav', async (ctx, next) => {
ctx.response.body = Nav;
});
function extractfile(filePath,filename)
{
console.log('开始解压:'+filePath);
// 停两秒才继续上传
sleep(2000);
// 要上传完才能进行处理
const filetmp = new AdmZip(filePath,'GBK');
filetmp.extractAllTo('./js3/'+filename,true); // output | js3
}
router.post('/upload', async (ctx, next) => {
const file = ctx.request.files.gamezip; // 获取上传文件
console.log(file.name);
let filePath = path.join(__dirname, '/zipupload/') + `${file.name}`;
// 这里设置了异步
console.log('开始上传');
const reader = fs.createReadStream(file.path);
const writer = fs.createWriteStream(filePath);
reader.pipe(writer);
reader.on('end', () => {
console.log('上传成功');
extractfile(filePath,file.name);
var p1 = new Promise((resolve, reject) => {
resolve('成功');
});
p1.then(function(){
console.log(" 【执行】:zsh obf_terser_dir.sh " + " auto"+ctx.request.body.mixtype + " "+ctx.request.body.gameid);
shelljs.exec( " zsh obf_terser_dir.sh " + " auto"+ctx.request.body.mixtype + " "+ctx.request.body.gameid, { async : true } ) ;
})
.then(
console.log("end!")
);
});
return ctx.body = Nav+"<p>正在执行任务!</p>";
});
const staticPath = '/zip'
const main2 = static(path.join(__dirname,staticPath));
// 查看静态文件
app.use(main2);
// 验证登录
app.use(authlogin);
// 操作相关
app.use(router.routes());
// app.use(main);
// 监听3000端口
app.listen(3000);
console.log('app started at port 3000...');
总的来说入门理解比较容易,能快速开发,基本完成这个项目只花了两天时间。