SEU_scheduleV1.0
特殊时期,被迫宅在家中无所事事,就想学一下简单的后端,搭建一个数据库。
现在把搭建过程记录一下,也算一个小型数据库的搭建教程。
SEU_scheduleV1.0:http://byzeal.cn/SEU/SEU_schedule.html
SEU_scheduleV1.0:http://49.232.58.172/SEU/SEU_schedule.html
(由于2020.2.13前新域名都在备案,所以给出服务器地址吧qwq)
这是一个小工具,把学校课程做成数据库,前端做成了动态表格,实现了查询、分页、筛选的功能
思路概括
一个好的网页项目,需要有舒适体验的前端以及不掉链子的后端。之前不管是写自己的主页还是在csdn上写博客,不管是html还是md,我的体验都局限于静态页面,从未接触过真正的数据库。所以这次我把重点放在了研究后端上,在开始写网页前,查了很多关于数据库的资料,最终确定了自己的数据库形式。
总的来说,就是搭建前台,前台做好response和request响应;搭建后台,将需要的数据导入数据库;再写好数据库及其接口,使其能处理response和request;接下来,在接口的基础上写一些处理不同request的函数,比如搜索引擎,分页算法等等;最后,做一些润色工作,使网页体验更加舒适。当然,在每一步的尝试中,我都遇到了很多困难,换了很多种不同的实现方法。开始尝试了mysql、mongodb、lowdb等等,后来不断遇到问题不断换思路,东拼西凑了一堆方法方法最终实现了这个小工具(最终是用layui+nodejs+json小数据库实现)。
实现过程
1.爬取数据
选择你想要爬取数据的来源,我选择的是学校的教务处网站
SEU教务处的数据服务地址:http://xk.urp.seu.edu.cn/jw_service
注意:爬取数据的网址尽量选一些校园网,公益教育网之类的,不然处理繁杂的数据也不是一件易事。
基于python urllib和request包,从服务器中爬取数据,具体细节就不说了,这并不是重点。
有趣的是,在爬取数据的过程中,意外的发现在服务器中竟然存在着静态的数据文件。所以没花多长时间就搞到了全校的课程数据。之后数据可以选择先保存成txt(注意编码,不是utf-8可能之后会出现汉字乱码问题),也可以用pandas转成excel(我转成了excel),方便之后的转化。
2.处理数据:excel数据与json数据转换
.json是很多数据库与前端交换数据的文件形式,我们可以先将上一步爬到的数据变成json文件
这里介绍一个很好的转换工具http://excel.wj2015.com/,提供layui数据格式转换。由于我确定要使用layui完成前端,所以在转换完成后格式上不需要更改。如果你使用别的数据格式,根据data[]数组进行修改即可。
layui数据格式:
如果只保留data数组:
在数据对象中A属性我设置成了编号,想着之后检索快一点(事实证明似乎没有卵用 )
3.后端准备:选择数据接口
有什么方便的,不需要新学动态网页语言的,操作简单的数据接口搭建方式吗?有的!!!就是nodejs!!!
百度百科是这么描述它的:
Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby
等服务端语言平起平坐的脚本语言。
完全不需要接触php,在nodejs的运行环境中,你可以轻松的用JavaScript 搭建自己的数据接口。
安装与配置nodejs的教程在这里:nodejs
安装完nodejs后,其实还需要安装一堆扩展包,后面都会用到。这里我就先总结一下
需要:express、body、cors
npm install -g express –registry=https://registry.npm.taobao.org
它们安装都在cmd终端,指令格式可以参考上条语句
nodejs本体和扩展包都安装完了就可以开始工作了
先做一个服务器测试,新建test.js脚本
var express = require("express");
var app = express();
app.listen(3000);
app.get("/",function(req,res){
res.send("第一个本地服务器");
});
终端执行
node test.js
用浏览器打开127.0.0.1:3000
测试成功
接下来就是搭建数据接口了
这里给出我做好的数据接口
const express=require('express');
const cors=require('cors');
const app=express();
app.listen(7979,()=>console.log('server start'));
app.use(cors());
app.all('*', (req, res) =>
{
console.log(req.query);
console.log(req.query.page);
res.json("这里是你想要返回给前台的数据");
}
});
cors=require(‘cors’) 必须要用,跨域访问,这就是之前需要安装的扩展包,我在这卡了好长时间T^T,没有它访问就是空白
app.listen(7979)表示监听7979端口,这个任意设置,只要不与你的服务器上其他端口重合就行
console.log(req.query) 用于在cmd上显示日志,合理添加一些console.log可以方便地掌握数据交换全过程
res.json() 以json文件形式返回,res共有三种,详情见nodejs的api文档
日