博主在学习安卓课程做期末程序的时候就一直想自己做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 分开写,具体的自己思考,很简单,不会可以私信我