#服务器
web引用:浏览器向服务器发送一个请求,服务器再响应给浏览器。
#####2台计算机之间交互要遵守的条约(协议):
1. TCP/IP协议有4层 简化版 //OSi是它的前身,协议有七层
2.
协议组(每一组都是协议):
第一层:引用层:http协议;
第二层:传输层 又分:①TCP协议:安全协议,会经过三次握手和另一台计算机传送。②VDP协议:不安全协议,传输效率高(例直播)
第三层:网络层 IP协议:把当前的地址做一个IP的封装。
第四层:链路层 负责把数据的每一届传递到另外一台计算机上。
另外一台计算机首先接触到的是链路层-网络层-传输层-引用层
??TCP协议:每一台电脑都支持,最为广泛。
#####引用层http协议:全名:超文本传输语言
######特性:
1. 基本请求响应模型
(浏览器向服务器发送一个请求,服务器再响应给浏览器。如果没有请求,就不会响应) 客户端与服务器,如果安装了软件,只要安装了;客户端的内部自己有协议,我们自己不用点,它会主动发过来,例QQ。。。
2. 短(无)链接(链接一次就断开,链接太频繁了);
3. 无状态:每一次访问,都认为是新的,记忆短
#####http协议的访问流程:
1. 当我们先给浏览器发起请求。
2. 交给域名解析(浏览器会把我们输入的网址进行解析)。怎么解析:用域名服务器解析 。域名服务器解析挂了之后的现象:输入网址,进不了网站,但是可以QQ上网。
3. 经过三次握手建立链接。
4. 发送请求数据
5. 服务器响应数据
6. 浏览器接收数据后关闭链接。
#####http协议的内容: 1封装 2 解封装
请求信息:封装(4部分) 浏览器安装http协议来封装,发送给服务器
第一部分:请求行:包含了请求方法(get/post);包含了请求路径;包含了协议的版本;
第二部分:请求头:以键值对的形式存在;包含了浏览器的版本和浏览器的相关信息;
第三部分:空行
第四部分:请求消息体(除了get)。
相应信息:4个部分;
第一部分:状态行(包含状态码;包含状态描述);
第二部分:响应头:以键值对的形式寻在,服务器发给浏览器的设置信息。(响应头: 里面的东西,浏览器是不会显示出来的)
第三部分:空行
第四部分:响应消息体。
(状态码:100-199 内部状态,少见 ; 200-299正确状态;300-399资源备已走,用缓存302代表已走,304资源缓存;400-499错误状态,客户端状态,404找不到页面;500-599错误状态,服务器出错,503服务器崩溃。
###Node.js (2009年之前,前端只写html和css;2009年之后出现Node.js)
#####Node.js原理:
Node.js是一个基于chromeV8引擎javascript运行环境。
Node.js使用了一个事件驱动,非阻塞式I10的模型,使其轻量又高效。(解释:一个线程负责接收所有的请求,然后放入事件队列中,让其他线程来处理;)
Node.js的包管理器nmp,是全球最大的开源库生态系统
引入Node.js模板:const require("模板") fs 文件系统处理 path路径
path.resolve()拼接得到绝对路经,从右往左处理。
fs.statSync()返回一个文件信息,参数是路径
fs.unlink 异步删除文件
fs.unlinkSync 同步删除文件
fs.rmdir删除文件
变量名.isFile 是否是一个文件
fs.isDirectory是否是一个目录
变量名.readdirsync 返回一个数组
##### http搭建服务器
```js
const http = require("http");//引入模块前面不加.\,但是引入自己的文件,必须写,并且是相对路径
//创建服务器
let server = http.creatServer(function(req,res){
res.write("<h1>搭建服务器</h1>")
res.end();
});
//启动服务器
server.listen(3000,function(){
console.log(12);
})
```
查看本机:
1. 127.0.0.1.端口号(某个应用程序的窗口,并且保持其唯一性)
2. localhost:端口号
(多个应用程序不可用同一个端口,但是一个应用程序可有多个端口
url网址)
1. url.parse()将解析路径成一个对象
```js
let urlObj = url.parse(req.url);
urlObj.pathname//获取路径名
urlObj.query//获取参数
```
2. querystring.parse()该方法会把一个 URL 查询字符串 str 解析成一个键值对的集合
### express插件(可以运用到判定浏览器向服务器请求的是静态网页还是动态网页,然后做出相应的响应)
1. 获取参数
1. let phone = req.query.phone(form表单提交方式为get)
2. let phone = req.body.phone(form表单提交方式为post)
2. 重新定向一个新页面
1. response的方法
1. res.redirect("path")重定项
2. res.send("")发送字符串
3. res.location("path")作用同redirect
res.sendStatus(302);
### GET和POST区别
1. GET请求参数放到?后面、POST请求参数放到请求消息体后面
2. GET的请求参数是有限制的,它整个url不能超过255个字符,POST无限制
3. GET请求可看见、POST请求数据不可见
4. GET请求参数是缓存过的,POST提交的请求参数是不会被浏览器缓存的
#AJAx
作用:在不刷新页面的情况下可以与服务器进行交互(局部刷新)。
Jquery实现AJAX的方法:
(先引入jquery,js 放在public 里面)
```js
方法1:
window.onload = function (){
phone.onblur = function (){
$.get("/user/isPhoneExist",{phone:phone.value},function(data)
$("#phoneInfo").html(data);
});
```
```js
方法2:
window.onload = function (){
$.ajax({
type:"post" //get/post
url:"/users/isPhoneExist",
data:{phone:phone.value},
success:function(data){
$("#phoneInfo").html(data);
});
});
```
###数据库:本身也是一个引用程序
1. 关系型数据库(不适合做大型数据的存放,做增删改查) 语言SQL:mysql SQLServer DB2 Oracle
2. 文档型数据库:
3. NoSQL:
4. mongoDB:JSON对象 1.先安装mangoDB ,启动;2 链接工具(命令行连接/可视化连接)
5.
#####mongoDB的包含关系:
mongoDB 包含数据库 ;(如果没有,写一个use f46,它自己就建立连接了)
数据库包含集合;
集合包含文档;
文档包含字段
(插入,查看,查询,删,更新)
db.users.find()查看
### mongoDB命令行连接:
db.users.find()查看
db.users.insert({})插入 例: db.ussers.insert({phone:"12345678912",pwd:"123"}
db.users.update({})修改 例:db.users.delete({根据它来修改},{$set{修改后的值}}) ==db.users.delete({phone:"123"},{$set{pwd:"456"}})
db.users.remove({带条件删除 }) 删除 // db.users.remove({ })如果括号里不指定删除那个对象,它就会清空所有的对象
正则表达式:db.users.find({phone:/1/}) db.users.find({phone:{$regex:"2"}})
### mongoDB可视化连接:
1. 先下载npm i ykt-mongo --save-dev //老师封装的
2. 在package.json里面加一条数据 :
```js
"db":{
"url":"mongodb://127.0.0.1:27017",
"dbname":"f46" //"f46"随便取的
}
```
###Rest(资源状态表述转移)
任何一个外部的都可以对资源进行增删改查。
rest所有的东西都可以想象成资源。
rest基于http协议访问
1. 获取 GET users 复数
获取某一段(id ): GET users/id 例:users/123
获取其他条件查询: GET users/id ?name... 只有GET(获取)id才有?
2. 增加:Post users 增加在消息体
3. 修改 :Put users/id 修改的内容也在消息体
4. 删除 :delete users/id 消息体
reload 与AJAX一样在不刷新页面的情况下,把数据库里面的数据渲染在页面上。
###分页
分页分两种:
1. 数据库分页:查找出来的时候就已经分好页了。 优点:对内存消耗小。坏处: 。一般情况下采用数据库分页。
2. 在程序代码上分页: 查出所有代码。优点:通用性。 缺点:通用性。
当前页:
每页显示数:显示出来的
总页数:总数/每页显数 (除不尽的,向上取整)
总数:
Limit与skip方法:
Limit 限制取几条 例:db.students.find({}).limit(3); //limit(3)显示前3条
Limit的值算法:(当前页-1)X 每页显示的数
服务器分页代码:.findByPage(page,rows) //有2个参数 page当前页 rows 每页显示的数
easyui的方法:html
pagination:true //设置
显示分页
pageList:[5,10,12,20] //设置每页显示的条数
skip跳过 ,默认为0 例:db.students.find({}).limit(3).skip(6);
###session :用来维持状态
1. session是服务器当中的一个对象 //对象可以保存任何东西
2. session 又称会话 //会话的时间靠匹配来决定
3. 每个session 对象都有一个唯一的session ID值
4. session ID 作为服务器传给浏览器
5. session ID是经过cookie传递的
注:
1. 浏览器不同就会产生不同的session对象。浏览器不同,cookie不会共享,所有就会产生不同的seseeion ID ;2. 浏览器相同,产生一个新的标签页,session ID相同
let user = req.session.user || {}; //获取
res.send(user); //返回
###上传图像
1. ajaxfileupload:jquery中用于上传及转码的插件
```js
$.ajaxFileUpload({
fileElementId: "image", //需要上传的文件域的ID。
url: "/users/upImg", //后台方法的路径
type: ‘post‘, //当要提交自定义参数时,这个参数要设置成post
dataType: ‘string‘, //服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。
secureuri: false, //是否启用安全提交,默认为false。
async: true, //是否是异步
success: function (data) { //提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
console.log(data);
},
error: function (data, status, e) { //提交失败自动执行的处理函数。
console.log(e);
}
});
```
2. multiparty:服务器端用于保存上传的文件并建立新的名字的插件
```js
//生成multiparty对象,并配置上传目标路径
var form = new multiparty.Form({ uploadDir: ‘./upImages‘ });
//上传完成后处理
form.parse(req, function (err, fields, files) {
var inputFile = files.file;
var uploadedPath = inputFile.path;
var dstPath = ‘./upImages/‘ + inputFile.originalFilename;
fs.rename(uploadedPath, dstPath, function (err) {
if (err) {
res.send(err);
} else {
res.send(dstPath);
}
});
```
###https:
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。
###前后端分离
#####为什么选择前后端分离
可以很好的解决前后端分工不均的问题,将更多的交互逻辑分配给前端来处理,而后端则可以专注于其本职工作,比如提供API接口,进行权限控制以及进行运算工作。而前端开发人员则可以利用nodejs来搭建自己的本地服务器,直接在本地开发,然后通过一些插件来将api请求转发到后台,这样就可以完全模拟线上的场景,并且与后台解耦。前端可以独立完成与用户交互的整一个过程,两者都可以同时开工,不互相依赖,开发效率更快,而且分工比较均衡。
###面试常问Amd 和 cmd 的区别 ;和require.js和sea.js的区别:
1. Amd 和 cmd 都是规范;(es6没有出现是都非常火爆, Amd 是国外的, cmd是国内的)
2. require.js和sea.js是实现规范
###require.js和sea.js的区别:
#####相同点:
1.都是模块加载器;
2. 都是采用define函数来定义模块;
3. 都是解决了前端模块化的时候全局命令空间污染和解析依赖问题。
#####不同点:
1. 两者定位上有差异,reqire.js专注于浏览器端,只有异步加载;sea.js既可以用在浏览器端也可以用在服务器端,支持异步也支持同步;
2. 两者遵循的标准不一样,require.js遵循的是Amd规范,而sea.js遵循的是cmd规范;
3. 两者对第三库的支持也有差异,require.js强势让第三方修改代码来遵循它;而sea.js不强推第三方库,采用一套成熟的封装机制。
4. require.js更加专注于国外的使用率高,而sea.js是由国人开发的,包容性强,语言上没有障碍,所有国内使用率高。
###模块化:
引入的方法:import // 例 import 变量 from “相对路径”
导出的方法: export
//例 export {方法名 as default} //导出一个
//例 export {A , B , C} //导出多个
$("#main").load(路径,function(){});--远程加载
#####单页(应用)
1. 概念:整个页面只有一个系统。只有一个Web 页面的应用,是加载单个html页面并在用户与应用程序交互时动态更新该页面的web应用程序。
2. 好处:交互性比多页应用好
3. 缺点:开发难度提高了
#####多页(应用)
1. 概念:2个页面及以上组成的页面。
#####easyui的效果使用单页应用加载出来的办法:$.parser.parse() ; //解析页面
服务器
Posted 小小小梅子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了服务器相关的知识,希望对你有一定的参考价值。
以上是关于服务器的主要内容,如果未能解决你的问题,请参考以下文章