node.js web框架

2020/12/17 posted in  客户端
Tags: 

有个小服务,需要使用node.js运行,需要提供一个后台给运营人员使用,故使用node web框架来搭建。Egg.js是不错的选择,不过服务不需要那么大型,所以采用koa快速开发

使用到的node.js扩展

// 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路由

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

总结

总的来说入门理解比较容易,能快速开发,基本完成这个项目只花了两天时间。