一、网站的组成
网站应用程序主要分为两大部分:客户端和服务器端。
客户端:在浏览器中运行的部分,就是用户看到并与之交互的界面程序。使用HTML、 CSS、JavaScript构建。
服务器端:在服务器中运行的部分,负责存储数据和处理应用逻辑。
二、 Node网站服务器
能够提供网站访问服务的机器就是网站服务器,它能够接收客户端的请求,能够对请求做出响应。
IP地址:互联网协议地址
URL:统一资源定位符,又叫URL (Uniform Resource Locator),是专为标识Internet网 上资源位置而设的一种编址方式,我们平时所说的网页地址指的即是URL。
//1.导入系统模块http
//2.创建服务器
//3.监听服务器
//4.添加请求事件
const http = require('http')
const app = http,createServer()
app.on('request', (req, res)=>{
res.end('hello')
})
app.listen(3000)
console.log('服务器启动成功')
一、概念
客户端与服务端共用的的规范,二者都能懂。
超文本传输协议(英文: HyperText Transfer Protocol,缩写: HTTP) 规定了如何从网站服务器传输超文本到本地浏览器,它基于客户端服务器架构工作,是客户端(用户)和服务器端(网站)请求和应答的标准。
二、报文
在HTTP请求和响应的过程中传递的数据块就叫报文,包括要传送的数据和一些附加信息,并且要遵守规定好的格式。
三、请求报文
1.请求方式( GET请求数据,POST发送数据 )
2.请求地址 ( URL )
app.on('request', (req,res) => {
//获取请求报文
req.headers
req.headers['accept']
//获取请求方式
req.method
//获取请求地址
req.url
})
四、响应报文
1.HTTP状态码
2.内容类型
text/html
text/css
application/javascript
image/jpeg
application/json
//设置响应状态码和内容类型
res.writeHead(200, {'content-type': 'text/html; charset=utf8'})
一、请求参数
客户端向服务器端发送请求时,有时需要携带一些客户信息, 客户信息需要通过请求参数的形式传递到服务器端,比如登录操作。
//处理url地址
//导入系统模块url
const url = require('url')
//获取请求方式
const method = url.parse(req.url).method
//获取请求地址
const pathname = url.parse(req.url).pathname
//导入系统模块 querystring
app.on('require', (req, res) => {
let postData = ''
//监听参数传输事件
req.on('data', chunk => postData+=chunk)
//监听参数传输完毕事件
req.on('end', () => {
console.log(querystring.parse(postData))
})
})
二、路由
路由是指客户端请求地址与服务器端程序代码的对应关系。简单的说,就是请求什么响应什么。
app.on('request', (req,res) => {
const pathname = url.parse(req.url).pathname
if (pathname == '/index') {
res.end('欢迎来到首页')
}else if(pathname == '/list'){
res.end('欢迎来到列表页')
}else{
res.end('你访问的页面不存在')
}
})
三、静态资源
服务器端不需要处理,可以直接响应给客户端的资源就是静态资源,例如CSS、 JavaScript、 image文件。
//1.导入系统模块
//2.创建服务器
//3.监听服务器
//4.为网站服务器对象添加请求事件
//5.添加路由功能
//1
//系统模块
const http = require('http')
const url = require('url')
const path = require('path')
const fs = require('fs')
//第三方模块
const mime = require('mime')
//2
const app = http.createServer()
//4
app.on('request', (req, res)=>{
//(1)获取请求方式
const method = req.method
const method = method.toLowerCase()
//(2)获取请求地址,并将用户的请求地址转换为绝对地址
const pathname = url.parse(req.url).pathname
pathname = pathname == '/'? '/index.html': pathname
const realpath = path.join(__dirname, 'public' + pathname)
(3)获取请求路径的资源类型
let type = mime.getType(realpath)
//(4)读取文件
fs.readFile(realpath, (err,doc)=>{
//如果读取失败
if(err!=null){
res.writeHead(404, {'content-type': type; charset=utf8})
res.end('文件读取失败!')
return
}
//如果当前成功
res.writeHead(200, {'content-type': type; charset=utf8})
res.end(doc)
})
})
//3
app.listen(3000)
console.log('服务器启动成功,请访问localhost:3000')
四、动态资源
相同的请求地址不同的响应资源,这种资源就是动态资源。
http://www.itcast.cn/article?id=1
http://www.itcast.cn/article?id=2
五、异步API
Promise
async/await