博主在學習安卓課程做期末程序的時候就一直想自己做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 分開寫,具體的自己思考,很簡單,不會可以私信我
