赞
踩
这里我也就不废话了,这里我就不讲数据爬取了,直接给大家展示
这里我会将一个整体的接口分为几个单独的模块,进行封装(为了以后多功能的处理,防止出错后,不方便查找),这里我使用的是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文件就是整个接口的组成,我们学习接口的目的并不是让我们去公司写接口,写接口终归是后端的事情,而且我们学的也只是皮毛,我们主要是养成一个习惯,让我们了解后端的操作,方便以后去了公司,我们跟后端进行合作,有什么不会的可以私信我,我会一一回复,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。