node基础二(服务器)

服务器端基础概念

一、网站的组成
网站应用程序主要分为两大部分:客户端和服务器端。
客户端:在浏览器中运行的部分,就是用户看到并与之交互的界面程序。使用HTML、 CSS、JavaScript构建。
服务器端:在服务器中运行的部分,负责存储数据和处理应用逻辑。

二、 Node网站服务器
能够提供网站访问服务的机器就是网站服务器,它能够接收客户端的请求,能够对请求做出响应。

IP地址:互联网协议地址
URL:统一资源定位符,又叫URL (Uniform Resource Locator),是专为标识Internet网 上资源位置而设的一种编址方式,我们平时所说的网页地址指的即是URL。

创建一个web服务器

//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('服务器启动成功')

HTTP协议

一、概念
客户端与服务端共用的的规范,二者都能懂。
超文本传输协议(英文: 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状态码

  • 200请求成功
  • 404请求的资源没有被找到
  • 500服务器端错误
  • 400客户端请求有语法错误

2.内容类型
text/html
text/css
application/javascript
image/jpeg
application/json

//设置响应状态码和内容类型
res.writeHead(200, {'content-type': 'text/html; charset=utf8'})

http请求与响应处理

一、请求参数
客户端向服务器端发送请求时,有时需要携带一些客户信息, 客户信息需要通过请求参数的形式传递到服务器端,比如登录操作。

  1. GET请求参数
    参数被放置在浏览器地址栏中,例如: htp://localhost:3000/?name= zhangsan&uage=20
//处理url地址
//导入系统模块url
const url = require('url')
//获取请求方式
const method = url.parse(req.url).method
//获取请求地址
const pathname = url.parse(req.url).pathname
  1. POST请求参数
    参数被放置在请求体中进行传输
    获取POST参数需要使用data事件和end事件
    使用querystring系统模块将参数转换为对象格式
//导入系统模块 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

你可能感兴趣的:(node)