这里我也就不废话了,这里我就不讲数据爬取了,直接给大家展示
这里我会将一个整体的接口分为几个单独的模块,进行封装(为了以后多功能的处理,防止出错后,不方便查找),这里我使用的是http 不是express
数据库的链接(mysql模块.js)
数据库的链接我单独放在一个js文件里面(mysql模块.js)
// 导入mysql模块
var mysql = require('mysql');
// 创建数据库连接
var connection = mysql.createConnection({
host : 'localhost', // 主机名
user : 'root', // 用户名
password : '123456', // 数据库密码
database : 'test' // 数据库名
});
//将该方法暴露出来,让别的文件可以调用该方法
module.exports = (sql, callback) => {
connection.query(sql, (error, results, fields) => {
if (error) throw error;
callback(results);//将得到的数据返回
})
}
module.exports与exports的区别
exports是引用 module.exports的值。module.exports 被改变的时候,exports不会被改变,而模块导出的时候,真正导出的执行是module.exports,而不是exports
中间层代码(zhong模块.js)
需要导入的模块
const query = require("./mysql模块")
导入封装的js文件
const fs = require("fs")
引入读写模块,为了下面静态资源的读取
const path = require("path")
同样也是为了静态文件的读取
const querystring = require("querystring")
对http请求所带的数据进行解析
// 后端路由
// 后端路由指的是 url跟相关逻辑的对应关系
// 后端写接口 也就是写路由
// 导入数据库模块
const query = require("./mysql模块")//导入封装的js文件
const fs = require("fs");//引入读写模块,为了下面静态资源的读取
const path = require("path");//同样也是为了静态文件的读取
const querystring = require("querystring");//对http请求所带的数据进行解析
// 定义暴露的方法
module.exports = (request, response) => {
let reqUrl = request.url;//前端传来的url,其实这是后端定义,
//给前端的,所以在想这个问题时,应该是先从后端想起,我能应该抛弃前端的思维
const reqMed = request.method;//获取请求方式
const url = new URL("http://" + request.headers.host + reqUrl);//获取url
//判断前端ajax传入的url是否满足条件,后面get可省略,默认为get请求
if (reqUrl == "/list" && reqMed == "GET") {
// 调用mysql模块.js中暴露的方法 查询数据库 查在herolist表里面的数据
query("select * from herolist", results => {
//将数据处理后传回前台 转换为 JSON 字符串
response.end(JSON.stringify(results))
})
}
//同样是判断
else if (url.pathname == "/detail") {
// 获取前端传入url中的id值 ,将该值用来进行接下来的查找
const heroId = url.searchParams.get("id");
//调用mysql模块.js中暴露的方法
query(`select * from herolist where Id=${heroId}`, results => {
//这里是让后台传回去的数据再进行处理,方便前台调用
response.end(JSON.stringify(results[0]))
})
} else if (reqUrl == "/addHero" && reqMed == "POST") {
let str = "";
//因为数据是以流的形式传输的所以这里进行拼接
request.on("data", chunk => {
str += chunk;
})
//传输完毕后执行
request.on("end", () => {
//将一个字符串反序列化为一个对象。
const postData = querystring.parse(str);
query(`insert into herolist (heroname, heroIcon) values ('${postData.heroName}', '${postData.heroIcon}')`, results => {
response.end(JSON.stringify({
//这里是为了给前端返回数据,证明我数据库处理完毕
status: 200,
msg: "添加成功"
}))
})
})
} else {
// 读取静态资源,
fs.readFile(path.join(__dirname, "views", reqUrl), (err, data) => {
if (!err) {
// 存在当前路径
response.end(data);
} else {
response.end("404");
}
})
}
}
querystring.parse
parse这个方法是将一个字符串反序列化为一个对象。
http模块(index.js)
// 1. 读取静态资源
const http = require("http");
const router=require("./中模块")
// 搭服务器
const server = http.createServer((request, response) => {
router(request, response)
})
// 服务器监听
server.listen("4399", () => {
console.log("start");
})
上面三个js文件就是整个接口的组成,我们学习接口的目的并不是让我们去公司写接口,写接口终归是后端的事情,而且我们学的也只是皮毛,我们主要是养成一个习惯,让我们了解后端的操作,方便以后去了公司,我们跟后端进行合作,有什么不会的可以私信我,我会一一回复,