Nodejs入门--http模块

35 阅读3分钟

HTTP模块

创建HTTP服务端

  1. 创建一个http服务
/* 创建http服务 */

// 1.导入http模块
const http = require('http')

// 2.创建服务对象
const server = http.createServer((request,response)=>{
    // 设置响应头,告诉浏览器的解析规则
    response.setHeader("content-type","txt/html;charset=utf-8")
    response.end("hello server") // 设置响应体
});

// 3. 监听端口,启动服务
server.listen(9000,()=>{
    console.log("9000服务器已启动!");
})

// 4. 浏览器发送http访问
// localhost:9000
// http://127.0.0.1:9000

// 访问端口将执行response.end()的回调函数,返回响应体

// 5. 默认端口
// http协议默认端口80
// https协议默认端口443


  1. 获取请求的报文
/* 创建http服务 */

// 1.导入http模块
const http = require('http')

// 2.创建服务对象
const server = http.createServer((request, response) => {
    /* 请求头 */

    // 获取请求的方法
    console.log(request.method);
    // 获取请求的url(只包含url之中的路径和查询参数)
    console.log(request.url);
    // 获取http协议的版本号
    console.log(request.httpVersion);
    // 获取http的请求头
    console.log(request.headers);

    // 设置响应体
    response.end("hello server")

});

// 3. 监听端口,启动服务
server.listen(9000, () => {
    console.log("9000服务器已启动!");
})



  1. 获取请求体
const server = http.createServer((request, response) => {
    // 1. 设置一个变量
    let body = "";
    // 2. 绑定data事件
    request.on("data", chunk => {
        body += chunk
    })
    // 3.绑定一个end事件
    request.on("end",()=>{
        console.log(body);
        response.end("end!!!!!")
    })
});

  1. 获取请求参数
  • 方式一
// 1.导入url模块
const http = require('http')
const url = require("url")

const server = http.createServer((request, response) => {

    // 2. 解析request.url
    let res = url.parse(request.url,true)
    console.log(res);
    console.log(res.path);// 请求路径
    console.log(res.query.keyword); // 查询字符串


    // 设置响应
    response.setHeader("content-type", "text/html;charset=utf-8")
    response.end("server response==>" + res)
});

// 监听端口,启动服务
server.listen(9000, () => {
    console.log("9000服务器已启动!");
})


  • 方式二
/* 创建http服务 */
const http = require('http')
const url = require("url")

const server = http.createServer((request, response) => {
    // 1. 实例化URL的对象
    let url = new URL(request.url, "http://127.0.0.1")
    // 输出路径
    console.log(url.pathname);
    // 输出参数
    console.log(url.searchParams.get("keyword"));

    // 设置响应
    response.setHeader("content-type", "text/html;charset=utf-8")
    response.end("server response==>" + res)
});

// 监听端口,启动服务
server.listen(9000, () => {
    console.log("9000服务器已启动!");
})



  1. http请求小测试
const http = require("http");
const path = require("path");

const server = http.createServer((request, response) => {
    // 设置响应
    response.setHeader("content-type", "text/html;charset=utf-8")

    let { method } = request;
    let { pathname } = new URL(request.url, "http://127.0.0.1")
    if (method === "GET" && pathname === "/login") {
        response.end("登录成功!!!")
    }else if(method==="GET"&&pathname==="/reg"){
        response.end("注册成功!!!");
    }else{
        response.end("Not Found!")
    }
});

server.listen(9000, () => {
    console.log("9000端口已启动!!");
})

  1. http响应的设置
const http = require("http");

const server = http.createServer((request, response) => {
    // 设置响应状态码
    response.statusCode = 200
    response.statusCode = 203 // 可以覆盖
    // 设置响应状态的描述
    response.statusMessage="love you"
    // 设置响应头
    response.setHeader("content-type", "text/html;charset=utf-8")
    response.setHeader("Server","Nodejs")
    response.setHeader("test",["5","6","7"]) // 多个同名响应头
    // 设置响应体
    response.write("设置响应体!!") // 可以多次调用
    response.write("设置响应体!!")
    response.write("设置响应体!!")


    // 设置响应体(一个请求只能有一个end方法执行)
    response.end("server response")


});

server.listen(9000, () => {
    console.log("9000端口已启动!!");
})


  1. 读取文件的响应
const http = require("http");
const fs = require("fs")

const server = http.createServer((request, response) => {
    // 设置响应体
    response.setHeader("content-type", "text/html;charset=utf-8")
    // 读取文件内容
    let html = fs.readFileSync(__dirname + "/html.html");
    response.end(html) // end 接收buffer对象或者string


});

server.listen(9000, () => {
    console.log("9000端口已启动!!");
})

  1. 搭建一个静态资源的服务

const http = require("http");
const fs = require("fs");
const path = require("path");

const server = http.createServer((request, response) => {

    /* 静态资源的响应 */
    let { pathname } = new URL(request.url, "http://127.0.0.1")

    /* 文件的地址 */

    // dist 就是网站的根目录,或者叫静态资源目录
    let root = __dirname + "/dist"
    let filePath = root + "pathname"
    let mimes = {} // MIME MAP

    // 请求方法不允许
    if (request.method !== "GET") {
        response.statusCode = 405;
        response.end('405 Methods Not  Allowed!')
        return
    }

    // 读取文件
    fs.readFile(filePath, (err, data) => {

        /* 错误处理 */
        if (err) {
            console.log(err);
            response.setHeader("content-type", "text/html;charset=utf-8")
            switch (err.code) {
                case "ENOET":
                    response.statusCode = 404;
                    response.end('不存在!')
                case "EPERM":
                    response.statusCode = 403;
                    response.end('没有访问权限!')
                default:
                    response.statusCode = 500;
                    response.end('ERR!')
            }

            return
        }

        /* MIME 文件类型的处理 */

        // 获取文件类型 .text
        const ext = path.extname(filePath).slice(1)
        // 获取mime类型
        let type = mimes[ext]
        if (type) {
            // 设置响应头的字符码高于html之中的meta标签(尽量保持一致)
            response.setHeader("content-type", type + ";charste=utf-8")
        } else {
            // 未知类型设置application/octet-stream
            // 浏览器会执行下载操作
            response.setHeader("content-type", "application/octet-stream")
        }
        response.end(data) // end 接收buffer对象或者string

    })
});

server.listen(9000, () => {
    console.log("9000端口已启动!!");
})