文章可能会有些枯燥乏味但是文章结节讲的全是干货
怎么解释服务器
- 服务器是提供网络服务的机器,通过安装特殊的软件(或者是运行某段特殊的代码)来提供服务。
- 服务器=电脑+能给其他电脑/设备提供的软件
- 客户端与服务器:提供服务的是服务器 享受服务的是客户端
服务器类型
- 服务不同 服务器的类型不同
- web服务器。安装apache, tomcat, iis, 或者在nodejs环境写代码 来提供:图片浏览,新闻浏览…等服务的服务器。
- ftp服务器。安装serv-U软件,为其它电脑提供文件下载,共享服务。
- 数据库服务器。安装mysql软件,为其它电脑提供数据库服务
- 浏览器端与web服务器是通过http(或者是https)协议来进行请求和响应
ip地址
- 全称:
I
nternetP
rotocol Address - 作用:标识一个网络设备(计算机、手机、电视)在某一个具体的网络当中的地址。要访问某个电脑上的资源,先要找到它的ip
域名
- 一个IP地址的端口可以有65536个,范围是从[0,65535])。不同的端口被不同的软件占用,以提供不同的服务
- 一台电脑可以通过安装多个服务器端软件来提供服务,比如Web服务、FTP服务、SMTP服务等。显然,仅仅通过ip地址是无法区分不同的服务的
- 服务器要提供服务必须要通过指定的端口
- 服务器与客户端都需要通过端口要进行通信
- 端口是可以编程分配
- 有一些端口号是被预定了的
协议
-
制定客户端与服务器之间的通讯规则。不同的协议的作用也不同。
-
HTTP(HyperText Transfer Protocol) 超文本传输协议。
-
协议双方: 浏览器与web服务器
-
请求由浏览器发起的
-
HTTP 协议中明确规定了
请求数据
和响应数据
的格式(报文) -
浏览器 请求 资源 要遵守 http 协议: 请求报文(请求行,请求头,请求体)
-
服务器 返回 资源 要遵守 http 协议: 响应报文(响应行,响应头,响应体)
用http模块写一个简单的服务器
步骤
- 首先引入http模块
- 创建一个服务器
- 启动服务器
// 1. 引入http模块
const http = require('http');
// 2. 创建服务
const server = http.createServer(function(req, res) {
console.log('有人来访问了')
// 向客户端发送内容,并结束本次响应
res.end('hello world');
});
// 3. 启动服务
server.listen(8081, function() {
console.log('服务器启动成功,请在http://localhost:8081中访问....');
});
注意点:
- 小黑窗不要关,它就是服务器
- 服务器本身不会有主动行为(小黑窗看起来没有任何变化),它在时刻等待客户端的访问
- 不要用鼠标选中小黑窗的内容,会导致程序假死
- 修改代码后要重启
- 更改res.end()的内容,
重启
后,再次观察。 - 重启服务:就是重新运行程序(按下向上的箭头,再回车)
如何理解响应和请求
请求
当web服务器就绪之后,如果没有客户端来访问它,它也是不会有任何效果的。也就是说回调函数不会执行。 而每一次的请求,都会导致回调函数要执行一次。
响应
通过res.end来设置响应的内容,res.end()的格式只是能是buffer或者是String
-
引入核心模块,得到的http是一个对象。
-
http.createServer方法创建一个http服务。参数是一个回调函数:当有http请求进来时,它会自动被调用。
请求一次,它就被调用一次
。 -
第一个参数:`客户端的请求`。 第二个参数:`设置对本次请求的响应`。
-
**res.end()** :设置响应体,结束请求。
-
server.listen() 用来监听端口。
-
格式:server.listen(端口号,[回调函数]) 。回调是可选的。
-
说明:
-
如果监听成功,则回调函数会执行一次。
-
如果不成功(例如端口被占用),会报错
content type作用
- content-type用来告诉对方本次传输的数据的类型是什么
- 在请求头中设置content-type来告诉服务器,本次请求携带的数据是什么类型的
- 在响应头中设置content-type来告诉服务器,本次返回的数据是什么类型的
html:`res.setHeader('content-type', 'text/html;charset=utf8')`
css:`res.setHeader('content-type', 'text/css;charset=utf8')`
js:`res.setHeader('content-type', 'application/javascript')`
png:`res.setHeader('content-type', 'image/png')`
json数据:`res.setHeader('content-type', 'application/json;charset=utf-8')`
格式
res.setHeader('content-type', 值)
设置statusCode
作用:设置http协议请求状态码
res.statusCode = 301;
// res.setHeader('location','http://www.qq.com')
res.statusCode = 404
res.statusCode = 500
res.end()
重点 express
- expresss 是一个第三方模块(在npm上可以下载),在使用它之前要先去下载它,在下载包之前要先创建项目,并通过npm init 创建package.json文件
- 创建一个全新的文件夹,假设名字为 learn-express(目录名不要有汉字,也不要某个包的名字),在此目录下运行
npm init -y
命令来生成package.json文件
// 0. 加载 Express
const express = require('express')
// 1. 调用 express() 得到一个 app
// 类似于 http.createServer()
const app = express()
// 2. 设置请求对应的处理函数
// 当客户端以 GET 方法请求 / 的时候就会调用第二个参数:请求处理函数
app.get('/', (req, res) => {
res.send('hello world')
})
// 3. 监听端口号,启动 Web 服务
app.listen(3000, () => console.log('app listening on port 3000!'))