1. 程式人生 > >研究使用Github Pages搭建具有資料庫的個人網站

研究使用Github Pages搭建具有資料庫的個人網站

這段時間想使用github搭建一個個人網站,但是木有錢買伺服器(+﹏+),聽說github有一個Github Pages的功能,很好用,經過我的測試它支援html+css+js。而且網上也有很多已經開發好的框架可以直接使用,例如:Hexo。Hexo非常火,網上有很多人都在用,而且使用非常方便,經過幾個簡單步驟就可以把網站搭建起來。但是有一個問題,它的所有資料都是靜態的,它所展示的頁面都是提前渲染好的,而且無法連線資料庫。像我這種後端程式設計師,怎麼能忍受呢,完全不能忍啊有木有!突然我靈光一閃(好吧,我也就瞎想想),想到以下問題:
1、pages中,我不可能去安裝一個數據庫啊,也就不能使用mysql、mongodb等等了;
2、通過查詢資料發現,可以通過ajax的方式讀取專案中某路徑下的檔案,並且我把它放到Pages中也是可以讀取的,當時讀取的是一個json檔案。
3、那麼同上,我也就可以使用js去讀取sqllite的資料檔案了,最後經過我查詢資料發現,sql.js可以直接操作sqllite中的資料,無需進行任何安裝操作,程式碼如下:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
        <script type="text/javascript" src="js/sql.js"></script>
        <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    </head
>
<body> </body> <script> //建立sqllite例項,獲取資料 $(function() { $.ajax({ type: "GET", url: "db/test.db", success: function(data) { console.info("檔案讀取成功了:" + data); // var fr = new FileReader();
var uInt8Array = new Uint8Array(data); var db = new SQL.Database(uInt8Array); console.log("------db"+db); var contents = db.exec("SELECT * from test"); console.log("------content"+content); } }); });
</script> </html>

注意:需要引入jquery和sql.js,並且需要在工程目錄下建立 ./db/test.db ,這裡的test.db是我提前準備好的sqllite資料檔案。
sql.js檔案下載:https://github.com/kripken/sql.js

jquery檔案下載:http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js

sqllite資料視覺化工具:http://www.xue51.com/soft/5371.html

如果要生成一個帶有資料sqllite檔案,可以使用以下程式碼,(執行後,點選下載)

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
        <script type="text/javascript" src="js/sql.js"></script>
    </head>
    <body>
        <button name="test" type="button" value="val" onclick="save()">下載</button>
    </body>
    <script>
        function save() {
            //Create the database
            var db = new SQL.Database();
            db.run("CREATE TABLE test (列1 int, 列2 char);");
            db.run("INSERT INTO test VALUES (0,'hello');");
            db.run("INSERT INTO test VALUES (1,'world');");
            db.run("INSERT INTO test VALUES (55,'34534545');");
            db.run("INSERT INTO test VALUES (166,'woteggrgrld');");
            //save to local file
            var data = db.export();
            var arraybuff = data.buffer;
            var blob = new Blob([arraybuff]);
            var url = window.URL.createObjectURL(blob);
            var a = document.createElement("a");
            a.href = url;
            a.download = 'test.db';
            a.click();
            window.URL.revokeObjectURL(url);
        }
    </script>
</html>

4、但是有一個問題,我查詢資料發現,只能讀不能寫啊,咋辦,但是我大膽的想了一下,github是一個程式碼倉庫,我們能否在儲存資料庫的時候去模擬git的提交操作的呢?這樣就可以去修改倉庫中的資料檔案了。但是做起來可能很麻煩,慢慢研究…
5、再後來我又看了一篇文章,裡面使用了h5內嵌的sqllite和indexdb,但是後來發現它並沒有把資料儲存到伺服器端,只是把資料儲存在客戶端的瀏覽器中,不適用。
6、我也希望能和大家一起研究,做一個能夠在github Pages功能支援下的前後端都有專案,這樣我們以後的人就可以直接用了,比如進行簡單的登陸、評論、點贊等(簡單的資料互動)
7、我並不想去造輪子,但是目前經過我查詢資料還沒有發現任何框架能做到這一步,我覺得還是蠻有意義的。後期主要解決的問題是:如何把資料儲存到github倉庫中

參考資料:
https://blog.csdn.net/sunnyloves/article/details/48002839
https://github.com/kripken/sql.js
https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/Using_Github_pages