Node服务器与AJAX(一)

服务器

简介

之前我们写好页面,如果想要给自己看,直接用浏览器打开。如果想要给其他人看,就发给他。但是如果要看的人数太多,此时不可能一个一个的发送。于是架设一台服务器。这个服务器是放在公网上的。只要你把你的网站放在该服务器上,别人就可以通过公网访问到。(得有域名:域名指的是你的服务器在公网上的一个id)
简而言之,服务器就是用于提供服务的机器。
我们根据服务器的用途不一样,划分出不同的服务器来。我们学习的是最简单的web服务器。

NodeJS服务器

之前,有一个server.js文件,就是一个简单的NodeJS服务器。

HTTP协议

简介

浏览器:chrome浏览器、ie浏览器、火狐浏览器、edge浏览器等。这都是一些应用程序。他们的级别跟qq是一样的。

服务器:NodeJS服务器。

浏览器发出请求,请求服务器上的内容。它们两者之间所使用的规范,叫做HTTP协议。

HTTP协议规定了浏览器如何发出请求。

HTTP协议规定了服务器如何相应。

HTTP请求

如果说HTTP协议是类。则HTTP请求是实例化对象。

HTTP请求包含4个部分: 请求首行、请求头、请求空行、请求正文

请求首行:

图片1.png

请求头:

图片2.png

请求空行: 只是一个空白行 什么内容也没有 作用是分割请求头和请求正文。

请求正文: 暂无

URL

简介

URL指的是统一资源定位符。

我们在想要访问某一个网站时。第一步就是输入网址。该网址就是一个URL。

Demo:

https://login.taobao.com/member/login.jhtml?from=taobaoindex&f=top&style=&sub=true&redirect_url=https%3A%2F%2Fi.taobao.com%2Fmy_taobao.htm%3Fspm%3Da21bo.2017.1997525045.1.5af911d9IjloSn#aaa

如上,就是一个URL字符串。

一个完整的URL包含: 协议、域名、端口、pathName、search(? + query)、hash

当浏览器输入URL按回车之后

当浏览器的地址栏输入URL字符串并回车之后,浏览器会解析该URL。根据HTTP协议的规则决定往哪个域名下发送。

1 解析成URL对象
2 获取域名并解析成IP地址
    1 从浏览器缓存中获取对应的ip地址
    2 从系统缓存中获取对应的ip地址
    3 从路由缓存中获取对应的ip地址
    4DNS中获取对应的ip地址 
3 根据得到的ip地址发出HTTP请求 
4 请求到达服务器
5 服务器应答 链接建立
6 服务器处理 根据链接返回数据 
7 断开链接
8 浏览器得到数据开始渲染
9 在渲染过程中遇见link标签、script标签、img标签、video标签、audio标签等外链标签会重新发出HTTP请求。
缓存

当浏览器发送的请求与之前请求的数据URL一致时,会使用之前请求的数据,而不是重新发送请求。

NodeJS的特点

简介

官网:http://nodejs.org
简介:
NodeJS不是一门语言,它是一个开发平台。所使用的语言是JS。

NodeJS是一个基于ChromeV8引擎的、轻量、高效的、非阻塞I/O的开发环境。

NPM是世界上最大的开源库生态系统。

hello world

有一个JS文件:

console.log("hello world");
单线程

执行任务时,只有一个线程去执行。这叫做“单线程”。

非阻塞I/O

I: input 输入O:output输出

内存的运行速度很快、磁盘的转速相对来说很慢。如果从内存中提取数据到磁盘中,这叫从内存中"输出"。反过来叫"输入"。速度以磁盘的转速为准。此时线程是否等待?如果等待,叫阻塞I/O。不等待,叫非阻塞I/O。

事件驱动

因为非阻塞I/O。导致线程离开,I/O完成之后的后续任务将无法继续执行。当I/O完成时,会触发一个事件。该事件驱动程序继续执行。这叫“事件驱动”。

小案例
有一个诊所(NodeJS服务器)
诊所里有一个医生(单线程)
诊所里有N个护士(内存)
诊所里有仓库(磁盘)
有一天来了10个患者(前端发送的HTTP请求)。
医生处理第一个患者的症状。(处理流程包含: 诊断、开处方、抓药、医嘱)
诊断,医生可以立即完成,开处方医生也可以立即完成。抓药是由护士去仓库中拿药品。是一个I/O操作。
医生不会等待护士抓药回来,无法立即开医嘱。而是立即处理下一个患者的症状。继续如上过程。
此时,某一个护士回来了。护士不会把医生拉过去开医嘱。而是护士去排队。医生继续处理,处理到护士之后才执行该护士的对应患者的医嘱。

NodeJS中的模块化

NodeJS中的模块分两种,一种是核心模块。一种是第三方模块。

核心模块

所谓的核心模块指的就是NodeJS自带的模块。

官网左侧列表

第三方模块

所谓的第三方模块指的就是非核心模块。

定义模块

在NodeJS中,一个JS文件就是一个模块。

暴露功能
module.exports = sum; // 暴露的就是sum函数
module.exports.sum = sum; // 暴露的是一个对象 对象的sum属性才是sum函数
exports.sum = sum; // 同上
引入模块

引入第三方模块:
在NodeJS中,同样使用require函数引入内容

Demo:

// 引入b.js中的暴露功能
var b = require("./b.js"); 

引入时可以不写.js后缀,因为NodeJS对js文件敏感。

引入核心模块

核心模块只有一个名字,而且在内存中,所以,路径没法写。只需要写名字即可。

require("http");

node_modules文件夹

该文件夹是专门用于存放node的第三方模块的。

它的特点:

1 只要将一个第三方模块放入该文件夹,就可以像引入核心模块那样引入了
2 它可以在多层级目录中存在 当寻找文件时会先查找同级中的node_modules 如果有就进去找 如果没有就到上一级中查找是否有node_modules 依次往上 

NodeJS服务器

HTTP模块

该模块用于创建HTTP服务器

引入:

var http = require("http");

调用API:

var server = http.createServer(handler);

handler: 当有请求发送到本服务器时,调用的响应函数。

监听端口号:

server.listen(3000);
request

createServer方法中的handler是一个函数,该函数有两个形参。

req与res。

Req表示前端请求对象,所有的前端数据都在该对象身上。

重要属性:

req.url  URL字符串
req.method Method方法字符串(大写)
response

Res表示后端响应对象,如何响应数据由该对象的方法执行。

重要属性和方法:

res.setHeader  用于设置响应头
res.end     用于结束请求并返回数据的 只可以接收字符串和buffer
res.statusCode  用于设置响应状态码

最后

作者每周都会发布不错的文章,供大家学习,欢迎大家关注。

微信搜索【前端每日技巧】关注公众号,写作不易,希望能点赞👍️加收藏❤️和转发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值