博主在學習安卓課程做期末程序的時候就一直想自己做API了,結果網上的教程感覺都太雜,很多都文不對題,找不到一個明確的思路,結果就只能放棄改用jdbc實現數據庫交互,現在學了前端,又接觸了一點nodeJS之后,才終於有了思路,最近也成功給自己放在服務器上的網站部署了API。現在就來分享一下,也順便給自己留個備份。
ps:只是自己突然想到的做法,而且個人覺得真的是簡易版,可能不標准,但親測能用。
一、前期准備
首先聲明:不懂也沒關系,直接仿照代碼,需要修改的地方我會用紅色標注出來,不過mysql一定要懂一點,會寫sql語句就行。
需要的下載的東西(寫給完全的小白,比如幾個月前的我):vs code 、nodeJS、mysql
博主是在學菜鳥課程學習的nodeJS,本來也沒想做API,結果學到 express、api 還有 mysql這部分時,突然靈光一閃,把api內部的語句替換成mysql不就能做一個和數據庫相連的api了嗎,下面是教程鏈接
express教程、RESTful API教程、連接 MySQL
有興趣了解nodeJS的同學可以看一下,主要是這三個章節。沒興趣的直接跳過,下面直接上代碼
二、主要操作
創建一個js文件,如 server.js
打開終端,安裝express和mysql依賴
npm i express -S
npm i mysql -S
主要代碼
const express = require('express'); const app = express(); const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: '123456', // 改成你自己的密碼 database: 'test' // 改成你的數據庫名稱 }); connection.connect(); // 下面是解決跨域請求問題 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); res.header("X-Powered-By",' 3.2.1'); res.header("Content-Type", "application/json;charset=utf-8"); next(); }); // 這里就是主要要修改的地方,其實也就一行 // 把 address 改成你自己定的地址,就是連接訪問的那個地址 app.get('/address',function(err,res){ const sql = 'select * from carousel'; // 寫你需要的sql代碼,你要是不會寫那我就真的沒辦法了 connection.query(sql,function(err,result){ if(err){ console.log('[SELECT ERROR] - ', err.message); return; } // result內放的就是返回的數據,res是api傳數據 // 返回的數據需要轉換成JSON格式 res.json(result); }); }) var server = app.listen(8081, '127.0.0.1', function () { var host = server.address().address; var port = server.address().port; console.log("地址為 http://%s:%s", host, port); })
最后執行 node server.js(文件名)
在瀏覽器輸入 127.0.0.1::8081/address 即可,address改成你設定的
三、補充說明
- 這里只示范了get,post不能直接用,需要引入第三方插件
- app.get() 可以不止一個,復制黏貼,改變地址和改成你想要執行的功能的SQL語句就行
- ip地址和端口可以自己改,如果想放到自己的服務器上,把ip改成服務器的內網地址
- mysql長期不用會自動斷開連接(8小時),本地基本上碰不到這種情況,放在服務器上時要多加一個回調,具體參考這位大佬 server closed
- mysql 的部分可以利用 route 和 api 分開寫,具體的自己思考,很簡單,不會可以私信我