day03

上一篇

一、http请求概述

  • DNS解析(将域名解析成一个网络IP地址)然后建立TCP连接(三次握手),最后发送htt请求。
    day03_第1张图片

  • server接收到http请求,处理,并返回。

  • 客户端接收到返回数据,处理数据(如渲染页面,执行js)。

二、nodejs处理http请求

1、处理get请求和querystring
  • get请求,即客户端要向server端获取数据,如查询博客列表。
  • 通过querystring来获取数据,如a.html?a=100&b=200。
  • 浏览器直接访问,就发送get请求。
const http = require('http');
const querystring=require('querystring');

const server = http.createServer((req, res) => {
     
  console.log('method: ', req.method);//获取请求方式   get

  const url=req.url//获取请求url
  console.log('url: ',url);

  //解析url后面的参数,并赋值给query
  req.query=querystring.parse(url.split('?')[1])
  console.log("query: ",req.query)

  res.end(JSON.stringify(req.query))
});

server.listen(8000,() => {
     
    console.log("listening to 8000 port")
});

在这里插入图片描述
day03_第2张图片


2、 处理post请求和post data
  • post请求,即客户端要像服务端传递数据,如新建博客。
  • 通过post data传递数据
  • 安装postman
const http = require('http')
const server = http.createServer((req, res) => {
     
    if (req.method === "POST") {
     

        //获取请求头中的数据格式
        console.log('content-type', req.headers['content-type']);

        //接收数据
        let postData=""
        /*
          1)请求数据的大小是不确定的,因此采用数据流的形式
          2)服务端不断接收数据,每次接收到数据时就触发data事件
          3)该方法是异步的,后面内容会进行优化
         */
        req.on('data', chunk => {
     
            postData += chunk.toString()
        })
        
        //接收完数据后,触发end事件
        req.on('end', () => {
     
            console.log(postData)
            res.end('hello world')
        })

    }
})

server.listen(8000, () => {
     
    console.log("listening to 8000 port")
})

day03_第3张图片
day03_第4张图片


3、综合小案例
const http = require('http')
const querystring = require('querystring')

const server = http.createServer((req, res) => {
     
    //获取请求方式
    const method = req.method
    console.log("method: ",method)

    //获取完整url
    const url = req.url;
    console.log("url: ",url)

    //获取路由
    const path = url.split('?')[0]
    console.log("path: ",path)
    
    //获取请求参数
    const query = querystring.parse(url.split('?')[1])
    console.log('query: ',query)

    //设置返回格式为JSON
    res.setHeader('content-type','application/json')

    //返回的数据
    const resData = {
     
        method,
        url,
        path,
        query
    }
    
    //GET
    if(method === "GET"){
     
        res.end(
            JSON.stringify(resData)
        )
    }
    
    //POST
    if(method === "POST"){
     
        //读取客户端传递过来的数据
        let postData=""
        req.on("data", chunk => {
     
            postData += chunk.toString()
        })
        req.on("end", chunk => {
     
            resData.postData = postData

            res.end(
                JSON.stringify(resData) 
            )
        })
    }

})

server.listen(3000,() => {
     
    console.log("listening to 3000 port")
})
  • POST请求

day03_第5张图片
在这里插入图片描述

  • GET请求
    day03_第6张图片
    在这里插入图片描述

下一篇

你可能感兴趣的:(Node.js从零开发Web,Server博客项目学习笔记,nodejs,post,http)