Shell脚本(15)——JS宏读写数据库

wils
wils

创作者俱乐部成员

前面介绍了JS宏读写外部文件的问题,今天再来补上JS宏读写数据库

用的还是用cgi方式(主要是为了偷懒😁

  • 首先,还是下载busybox.exe和sqlite3.exe放到环境变量PATH里,便于后面使用

  • 然后创建cgi-bin文件夹,里面新建sql.sh文件,内容是

👋

#!/bin/sh

echo -e 'Content-type: application/json; charset=utf-8\n'

../sqlite3 -json ../a.db

第一行声明使用sh执行该脚本

第二行声明返回json,编码是utf-8

第三行用sqlite3执行请求的body,设置返回格式是json,数据库是cgi-bin的上级目录里的a.db

  • 然后在cmd里启动cgi服务,busybox httpd -p 8080,如果你喜欢,可以改成在JS里用shell执行,但容易因为沙箱保护、防火墙等问题导致运行失败,所以还不如写个批处理或cmd里手动执行

  • 最后,就可以在JS宏里通过fetch发送要执行的SQL代码,来读写数据库了

🔔

function sql()

{

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))})

}

只有一句fetch,url指向cgi-bin里的sql.sh脚本,method是POST,body是要执行的SQL,返回来的已经是json了,解析一下随便用吧

需要写的代码已经足够少了(能偷懒就偷懒),sqlite3功能上也足够用了,且在linux上一样用

如果不满足于这种基本的操作,还可以用node、py、php、c#等语言自己实现数据库的网络接口,或者直接使用php-crud-api、go-rest这种单文件的restful接口,运行后,JS宏可直接通过fetch读写数据库(restful接口),这种方案还更成熟、更安全,还直接的保护了你的代码,用户只是发送数据,获得结果,具体的处理过程在你的控制之中,不用再考虑vba代码保护的问题

至此,JS宏对外部数据访问的短板其实已经补上了,祝玩的愉快😁

广东省
浏览 361
收藏
8
分享
8 +1
1
+1
全部评论 1
 
Siserly
打卡
· 江苏省
回复