|
之前分享的帖子,吹过20年前的cgi方式,说是可以方便的给JS宏提供接口,但举的例子不直观,看不出效果
今天正好试试JS通过cgi接口,写入utf8文本,以及读写sqlite3数据库
- function tt()
- {
- Shell(`cmd /c cd "${ThisWorkbook.Path}" && busybox ash -c "pgrep -x httpd > /dev/null || httpd -p 8080"`, jsHide)
- fetch('http://localhost:8080/cgi-bin/tee.sh?a.txt', {
- method: 'POST',
- body: 'utf8文本内容'
- }).then(r=>{console.log(r.status)})
- }
- function sql()
- {
- Shell(`cmd /c cd "${ThisWorkbook.Path}" && busybox ash -c "pgrep -x httpd > /dev/null || httpd -p 8080"`, jsHide)
- fetch('http://localhost:8080/cgi-bin/sql.sh', {
- method: 'POST',
- body: 'create table t1 (x int);insert into t1 values (123);select * from t1;'
- }).then(r=>r.json()).then(e=>{console.log(JSON.stringify(e))})
- }
复制代码 JS宏这里其实就干两件事,用Shell启动cgi服务,用fetch发送请求
Shell这一句都一样,大概意思是,判断httpd是否已经启动,如果没有就启动httpd(它提供cgi服务)
然后就是fetch发送请求:
tt这个宏,是要写入文本,url问号后面是要写入的文件名,body是要写入的内容,完成后只返回个状态
sql这个宏,是要读写sqlite3,body里是要执行的语句,完成后会收到json数据
然后看一眼cgi脚本具体是啥
tee.sh的内容如下:
第一行声明用sh执行这个脚本(如果你喜欢,可以改成python等其他)
第二行声明返回的是纯文本,utf8编码
第三行,将请求里的body写入上一级目录里,以url问号后面的值作为文件名
- #!/bin/sh
- echo -e 'Content-type: text/plain; charset=utf-8\n'
- tee "../${QUERY_STRING##*\?}"
复制代码 sql.sh的内容如下:
第一行声明用sh执行
第二行声明返回json
第三行用sqlite3.exe处理body里传递过来的命令,返回json,数据库在上级目录里的a.db
- #!/bin/sh
- echo -e 'Content-type: application/json; charset=utf-8\n'
- ../sqlite3 -json ../a.db
复制代码
总的来说,写的代码很少,cgi方面就三行,也可以灵活更改,比如,需要写入gbk文件,那就把tee命令改成iconv -f utf-8 -t gbk -c | tee这样,就是转码后保存gbk文本;再比如,sqlite3改成duckdb也是一样,参数都一样
|
评分
-
1
查看全部评分
-
|