学习alilua - 制作快餐点餐工具

一、搭建环境

参考: http://alilua.com/docs.html

下载和编译alilua

$ git clone https://github.com/oneoo/alilua.git
$ cd alilua
$ make

设定网站目录

这是调整后的目录,将alilua作为子工程放入工程目录。

project/
├── alilua/             # alilua源码目录
├── css/
├── js/
├── scripts/            # lua脚本目录
│   ├── index.lua
│   └── upload.lua
├── template/           # html模板目录
│   └── index.html
├── restart.sh          # 快速重启脚本
├── route.lua           # alilua路由脚本
├── host-route.lua      # alilua路由配置
└── uploaddir/          # 上传文件目录

快速重启脚本(方便快速调试)

stop()
{
    pid=`ps -ef| grep "alilua" | grep -v grep | awk '{print $2}' `
    if [ "$pid"x != x ]; then
        kill -9 $pid
        echo "stop alilua"
    fi
}

二、快餐点餐工具需求

三、开始编码

index.lua和模板的使用

使用jsonrpc实现api请求

jsonrpc.js的实现

MySQL数据库操作的封装(alilua的require和dofile)

参考:oneoo/alilua#27

因为 require 过程中产生的 Lua 运行环境不是一个协程,所以会报 attempt to yield across C-call boundary 错误。

你把 require 改为 dofile 就可以运行的。

文件上传的实现

if(!xhr.sendAsBinary){
    xhr.sendAsBinary = function(datastr) {
        function byteValue(x) {
            return x.charCodeAt(0) & 0xff;
        }
        var ords = Array.prototype.map.call(datastr, byteValue);
        var ui8a = new Uint8Array(ords);
        this.send(ui8a.buffer);
    }
}

js实现下载csv数据

添加luapath到配置文件

源代码在这里:https://github.com/hanxi/alilua-demo-ordering

在此感谢alilua的作者oneoo在百忙之中抽空帮助我解答疑问

点击进入评论 ...