后端项目所需基础知识
一、在电脑中配置环境变量:
右键计算机图标选择高级设置,设置环境变量path中的配置,即可以在任何目录运行可运行的应用程序;
二、DOS命令窗口:window提供的输入命令的字符界面
1.打开DOS命令窗口常用命令:
- 在“开始”菜单–>“运行”输入框中输入: cmd
- 在“资源管理器”中的“地址栏”中输入: cmd
- 在任何目录中右单击的同时按”shift”键,然后选择“在此处打开命令窗口”
2.常见的DOS命令:
- cd: 切换目录
- 两个特殊目录: .代表当前目录 …代表上一级目录
- dir:显示当前目录中的内容
- 切换盘符: 盘符:
- cls:清屏
- mkdir:创建目录
- rmdir:删除目录
三、安装node
1.node简介:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境[服务端];
2. node特点:
- nodejs既是平台(可以当作web服务器[软件])又是开发语言;
- 单线程[相当于一家饭店只有一个服务员]、跨平台;
- 非阻塞的、异步I/O模型;
- 事件驱动;
3.运行node代码的两种方法:
- 在dos小黑窗中使用node命令来运行:
node 目标js文件
- 在visual code开发工具中安装"code runner"插件,然后在该开发工具直接运行nodejs代码;
四、了解HTTP协议
1.定义:HTTP(Hyper Text Transfer Protocol,超文本传输协议),它是基于请求响应模式、无状态的(没有记
忆功能)、应用层的协议。
2.http协议工作原理:
- 客户端(浏览器)与服务器建立联系;
- 客户端(浏览器)发送请求给服务器;
- 服务器接收、处理并返回给客户端(浏览器);
- 客户端(浏览器)与服务器断开连接;
3.请求报文数据格式由三部分组成: 请求行(请求方式 请求资源 协议版本)、消息报头、请求正文[可为空]。
4.响应报文数据格式由三部分组成:状态行(协议版本、状态码、描述信息)、消息报头、响应正文。
5.常见HTTP状态码:
- 1XX—表示接收的请求正在处理
- 2XX—请求正常处理完毕:200请求成功、204请求成功但没有资源返回
- 3XX—需要进行附加操作完成请求(重定向):301永久重定向、302临时重定向、303必须使用get方法获取资源
- 4XX—客户端请求出错,服务端无法响应:400请求报文中存在语法错误、403服务器拒绝该次访问、404找不到请求资源
- 5XX—服务器请求处理出错:500服务器在执行请求时发生了错误、502网关错误、503服务器停机维护
五、完整的URL地址
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
实例:" https: // user : pass @ sub.example.com : 8080 /p/a/t/h ? query=string #hash "
- scheme:传送协议。
- 层级URL标记符号(为[//],固定不变)
- 访问资源需要的凭证信息(可省略)
- host:服务器。(通常为域名,有时为IP地址)
- port:端口号。
- path:路径
- query:查询参数
- 片段。以“#”字符为起点
六、第三方模块(包)
1.第三方模块(包)官网;
2.将npm服务器切到国内淘宝服务器(镜像服务器),在dos命令中执行下面命令。一台电脑只需要配置一次
npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global
3.常见的npm命令:
- npm init [-y] 创建自己的package.json文件;
- npm i/install 安装当前项目所依赖的包,-g代码global全局安装;
- npm s/search 包名 搜索包
- npm r/remove 包名 删除一个包
- npm uninstall 包名 删除
六、MIME
MIME的全称是Multipurpose Internet Mail Extensions,即多用途互联网邮件扩展类型,在http协议中标识要返回数据的类型,客户端(浏览器)会根据不同类型的数据启动不同应用程序进行处理。
常用的MIME类型有:
- text/html html代码
- text/html html代码
- application/javascript javascript代码
- image/png png格式的图片
- image/gif gif格式的图片
- image/jpg jpg格式的图片
- image/jpeg jpeg格式的图片
七、Express框架
1.简介:基于 Node.js 平台,快速、开放、极简的 Web 开发框架[后端开发框架]。
express中文官网
express官网
2.在项目根目录执行命令安装: npm i express;
3.**Express中间件:**就是在接收请求之后返回响应之前要执行的函数,而这些函数有一定业务处理能力(自定义中间件、内置中间件、第三方中间件);语法app.use([‘路径’,],中间件函数)
常用第三方中间件:
- cookie的获取:npm i cookie-parser;
- session的获取:npm i cookie-session
注意事项:
- 使用中间件代码通常所在所有路由的最前面
- next()方法用来查询并执行后面能匹配上的路由;
- 当给next()方法传参时会自动查找并执行含有err,req,res,next四个参数的中间件;
4.Express生成器: 可以快速创建项目骨架,项目骨架包含有:项目启动文件、入口文件、模板文件夹、Router级别路由文件、静态资源目。
- 安装: npm i -g express-generator
- 生成项目骨架:express --view=ejs 项目名称
- 找到项目目录下载所有依赖:npm i/install
- 运行项目:npm start
5.Express优缺点: express将中间件和路由完美结合,通过中间件来划分业务,即便是再复杂的业务通过一系列中间件组合后也业务变得更清晰及线性化。express主要问题是使用的callback(回调函数),callback有两个主要问题:第一是业务不可以组合,第二是异常很难捕获;
八、ejs模板引擎
1.简介:模板引擎可以将数据与界面分离、前后端互不影响;页面渲染分为前端渲染和后端渲染,前端渲染使用ajax技术,后端渲染使用ejs、pug;
2.ejs模板使用:
- 安装: npm i ejs
- 配置ejs模板: app.set(‘配置项’,值)
app.set(‘view engine’,’ejs’); //设置模板引擎为ejs
app.set(‘views’,[‘模板文件存放目录1’,‘模板文件存放目录2’]); //设置模板文件存放位置
app.engine(‘html’,require(‘ejs’).__express); //将html文件作为ejs模板文件来解析
3.后端渲染: 就是当服务端接收到请求之后,将要渲染的数据在服务端解析完成,然后再将解析后的数据直接返回给客户端,客户端只负责展示数据,后端渲染的技术可以采用ejs、pug。
九、配置热更新(nodemon)
安装nodemon: npm i -g nodemon
十、数据库
1.概念:数据库是按照一定数组结构组织、存放、使用数据的仓库。
2.数据库分为关系型数据库与非关系型数据库:
- 常用的关系型数据库有:mysql、sqlserver、oracle等;
- 常用的非关系型数据库有: mongodb、redis、memcached等。
3.数据库的基础概念:
- 数据库 —> 表 —> 数据
- 记录:表中每一行称为记录(数据)
- 字段:表中每一列称为字段
- 主键:能唯一代表表中某条记录的列称为主键
- 外键:当表中某一列的值是另外一张表中主键的值,那么该列称为外键
4.windows下启动、停止mysql数据库的方式有两种:
- 在DOS命令窗口中输入
d:> net start mysql //启动mysql服务
d:> net stop mysql //停止mysql服务
- 在windows的“服务管理器”窗口中启动/停止mysql服务
第一种: 右单击桌面”计算机”图标–>”管理”,打开”windows服务管理器”;
第二种:在“运行”框中输入命令:services.msc
5.windows下连接mysql数据库的方式有两种:
1、使用mysql自带的客户端应用程序mysql.exe连接mysql数据库:
注意: -h表示要连接的mysql主机 -u表示使用的mysql用户 -p表示用户密码
2、使用可视化客户端工具(navicat)连接mysql数据库:
6.mysql数据库常用的管理命令:
1、查看当前主机有哪些数据库:show databases;
2、打开(切换)数据库:use 数据库名;
3、查看某个数据库中有哪些表:show tables;
4、创建数据库: create database 数据库名;
5、删除数据库: drop database 数据库名; //慎重使用
7.mySql数据库的增删改查:
- 添加数据
insert into 表名[(字段名1,字段名2…) ]values(‘值1’,‘值2’…)
- 删除数据
delete from 表名 [where 条件]
- 修改数据
update 表名 set 要修改的字段名1=‘值’,要修改的字段名2=‘值’… [where 条件]
- 单表查询数据
select */字段名/函数/字符串 from 表名 [ where 条件 group by 字段名 order by 字段名
asc/desc limit m,n having 条件 ]
- 联表查询数据
1、 全联接查询(inner join): select * from 表1 inner join 表2 on 条件 inner
join 表3 on 条件 [ where 条件 group by 字段名 order by 字段名 asc/desc
limit m,n having 条件 ]
全联接查询(inner join)的特点:
当要联接的表满足on条件时才会出现查询结果集中,否则不会出现在查询结果集中;
2、左联接查询(left join): select * from 表1 left join 表2 on 条件 left join 表3
on 条件 [ where 条件 group by 字段名 order by 字段名 asc/desc limit m,n
having 条件 ]
左联接查询(left join)的特点:
left join 左边的表不管是否满足on条件都会出现在查询结果集中,left join 右边的表如果满足on条件则会查询结果集中有具体的结果,否则left join右边的表在查询结果集中以null来显示。
8.sql注入: 利用sql语法本身的漏洞攻击数据库
十一、express通过mysql包操作mysql数据库
- 在项目根目录下安装mysql包: npm i mysql
- 创建mysql连接:let mysqlObj = mysql.createConnection({})
let mysqlObj = mysql.createConnection({
host: '主机名',
user: '用户名',
password: '密码',
port: 端口号,
database: '数据库名'
})
- 连接mysql数据库: mysqlObj.connect()
- 执行sql语句: mysqlObj.query(‘sql语句’[,[参数]],回调方法);
十二、封装express操作mysql数据库的类
const mysql = require('mysql'); //封装类(操作mysql数据库的类)
class DbMySql {
//属性 //方法
constructor() {
//创建mysql连接
this.mysqlObj = mysql.createConnection({
host: "localhost",
port: 3306,
user: 'root',
password: '123456',
database: 'xxxx'
});
//连接mysql数据库
this.mysqlObj.connect();
};
//执行sql语句
querys(sql) {
return new Promise((resolve, reject) => {
this.mysqlObj.query(sql, (err, arr) => {
if (err) {
//失败
resolve([err]);
} else {
//成功
resolve([null, arr]);
};
});
});
};
async exec(sqls) {
let arrs = await this.querys(sqls);
async function demo() {
let obj = new DbMySql();
let arr = await obj.exec('select * from xsb');
console.log(arr, 8888);
};
};
};
十三、模块化
1.commonjs语法(nodejs模块化语法)
单个暴露:
exports.属性 = 值
exports.方法 = function(){}
module.exports.属性 = 值
module.exports.方法 = function(){}
批量暴露:
module.exports = {}
注意:单个暴露与指暴露不能一起使用
2.使用nodejs模块化规范(commonjs)定义的模块只能在后端使用,但不能在前端使用,如果想在前端使用则需要使用工具browserify来编译代码。
1)、browserify官网:browserify.org
browserify主要用来将后台的代码编译成前端可以运行的代码
2)、安装browserify: npm install -g browserify
3)、browserify用法: browserify 源文件 -o 目标文件
3.前端(es6)模块化语法
1)、单个暴露
export var m = ‘mm’ export let n = ‘nn’ export function fn(){
}
2)、 整体暴露
let x = ‘xx’
let y = ‘yy’
let fn2 = function(){
}export { x,y,fn2 }
3)、使用模块:
import { 属性名/方法名… } from ‘文件路径’
注意:使用es6模块化语法定义的模块不能在vscode工具中直接运行,需要使用工具
babel将es6语法转换成es5语法,然后才能在vscode工具中运行:
1)、 babel官网:www.babeljs.cn
babel的功能:将es6语法转成es5语法、还能操作jsx语法(react)等。
2)、在dos小黑窗中安装babel-cli, babel-preset-es2015:
D:> npm install babel-cli -g
//在当前项目根目录中安装babel-preset-es2015包:
D:\web_xian> npm install babel-preset-es2015 --save-dev
–save-dev 开发依赖(开发阶段需要,上线不需要[因为已转换好了])
3)、在项目中定义babel配置文件:.babelrc文件,内容如下:
{
“presets”: [“es2015”]
}
4)、编译:
使用Babel将ES6编译为ES5代码(但包含CommonJS语法) :
如果想在前端中运行es6模块化的代码则需要使用Browserify编译js:
十四、使用Koa生成器快速部署项目:
- 安装koa生成器: npm i koa-generator -g
- 使用kao生成器部署项目:koa2 -e[使用ejs模板引擎] xxx(项目名称)
- 切换到baofeng项目目录中:cd xxx
- 使用npm install安装项目依赖包: npm install
十五、express与koa的区别
- express有中间件、koa没有;
- koa使用级联操作替代express中的回调函数;
- koa中的ctx封装了nodejs中的request对象、response对象;
- 取舍: express有丰富的中间件和包,如想使用这些中间件和包的话就使用express,koa强调的性能,同时可定制性比较高,如果想追求高性能及可定制开发的话就使用koa,另外之前的旧项目如果使用的是express则继续使用。