ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

http模块 创建静态服务器 获取GET。POST 数据

2021-07-21 22:06:34  阅读:146  来源: 互联网

标签:const GET url res req server http POST


http模块

​ 作用:创建web服务器
const http = require(‘http’)

​ 1,创建web服务实例

​ const server = http.createServer()

​ 2,监听请求

​ server.on(‘request’,callback)

​ request 事件名字

​ callback是一个回调函数 两个行参

​ 行参1:request 简写req 请求对象 里面包含请求对应地址携带的所有数据

​ 行参2:response 简写res 响应对象 里面提供了用于响应的方法和属性

​ 3,设置监听的端口号

​ server.listen(端口号,callback)

​ callback 回调函数 正常提醒用户监听成功即可

// 案例:手写一个服务器软件,启动后要求用户访问根“/”输出`hello world`,用户访问`/html5`输出`2021`
// a. 导入http模块
const http = require("http");
// b. 创建web服务器实例
const server = http.createServer();
// c. 监听请求
server.on("request", (req, res) => {
    // 在这里设置如何响应用户的请求

    //  获取用户访问的地址
    // console.log(req);
    let url = req.url;
    // 判断
    if (url === "/") {
        // 输出响应
        res.end("hello world");
    }
    if (url === "/html5") {
        res.end("2021");
    }
    // ...
});
// d. 设置监听的端口号
server.listen(8080, () => {
    console.log("服务器正在 http://127.0.0.1:8080 上奔跑!");
});

创建静态资源服务器

// a. 导入http模块
const http = require("http");
const path = require("path");
const fs = require("fs");
// b. 产生web实例
const server = http.createServer();
// c. 监听请求
server.on("request", (req, res) => {
    // 思路:
    // 1. 获取请求地址
    let url = req.url;
    // 如果用户访问“/”,需要让其地址为“/index.html”,否则读取文件会异常
    if (url === "/") {
        url = "/index.html";
    }
    // 2. 根据地址读对应的文件的内容(要使用绝对路径读取文件)
    let filepath = path.join(__dirname, "statics", url);
    if (fs.existsSync(filepath)) {
        // 在, 3. 响应输出给用户
        const data = fs.readFileSync(filepath);
        res.end(data);
    } else {
        // 不在,3. 响应404
        res.setHeader("content-type", "text/html;charset=utf-8");
        res.statusCode = 404;
        res.end("<h1>404:Not Found.</h1>");
    }
});
// d. 设置监听的端口号
server.listen(8080, () => {
    console.log("Server is running at http://127.0.0.1:8080");
});

获取get数据

// 学习如何接收get方式传递的数据
const http = require("http");
const server = http.createServer();
// 导入url模块
const url = require("url");
server.on("request", (req, res) => {
    // 尝试接收get参数
    // 细节:参数可能在哪里?  req.url上
    const uri = req.url;
    // 对象的解构赋值
    const { query } = url.parse(uri, true);
    console.log(query);
    console.log(query.username);
    console.log(query.age);
});
server.listen(8080, () => {
    console.log("server is running at http://127.0.0.1:8080");
});

获取post数据

// post数据的获取
// 问题:get与post有什么区别?
//      1. get获取数据,post表示提交数据
//      2. get是地址栏方式传值,post是请求体方式传值
//      3. 能够提交的数据的大小的区别,post可以容纳更多的数据
//      4. 能够提交的数据类型的区别,比如说:文件

const http = require("http");
const querystring = require("querystring")
const server = http.createServer();
server.on("request", (req, res) => {
    // 正因为post可以容纳更多的数据,所以在实际接收post数据的时候需要注意,post的数据可能无法一次性接收完毕,因此需要多次进行接收。需要监听特定的事件(data事件),实现了来一点数据就接一点数据。
    let arr = []; // 空的容器用于存放数据
    // 通过req监听data事件
    // buffer就是每次接收到的一点数据
    req.on("data", (buffer) => {
        // console.log(buffer);
        arr.push(buffer);
    });
    // 在所有的数据接收完毕之后(end事件)需要将所有的数据碎片做一个整合
    req.on("end", () => {
        // 合并所有的buffer碎片
        const buffer = Buffer.concat(arr);
        // console.log(buffer);
        // 将buffer转化成可读性的内容
        let post = querystring.parse(buffer.toString())
        console.log(post);
    });
});

server.listen(8080, () => {
    console.log("server is running at http://127.0.0.1:8080");
});

express模块

​ npm i express

​ 获取get数据 req.query

Restful规范

​ 是一个接口开发规范

​ GET: 查 POST: 增 PUT: 改 DELETE:删

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qAW0qZM6-1626874939256)(/Users/wangjianan/Library/Application Support/typora-user-images/image-20210721094204576.png)]

动态路由参数

默认情况下 expresss不支持动态路由传参

​ 第一种:普通的get传值 不需要额外声明即可使用

​ 第二种:动态路由参数 需要额外声明

​ 声明方式:第一种 必须传递(/users/:id)

​ 加上:表示id可变 可传任意值

​ 若不传ID 走404

​ 接收:req.params .id

​ 第二种 可选传递 (/users/:id?)

​ 接收:id 不传默认为0

静态资源托管

​ 不需要路由

​ 语法:app.use(express.static(‘文件夹地址’))

​ app.use() 表示使用其他方法 (中间件/模块化后的模块)

若需要前缀 语法:app.use(’/sdeffggs’,express.static(‘文件夹地址’))

​ 前面参数可传任意值

路由模块化

入口文件

const express = require('express')
const app = express()
const goodsRouter = require('模块路径')
app.use(userRouter)或者app.use(require('模块路径'))

拆分模块

const express = require('express')
const router = express.Router()
router.get("/goods", (req, res) => {
    res.send("商品列表");
});
router.get("/goods/:id", (req, res) => {
    res.send("商品详情");
});
router.post("/goods", (req, res) => {
    res.send("商品添加");
});
router.put("/goods/:id", (req, res) => {
    res.send("商品修改");
});
router.delete("/goods/:id", (req, res) => {
    res.send("商品删除");
});

module.exports = router

标签:const,GET,url,res,req,server,http,POST
来源: https://blog.csdn.net/wjngx/article/details/118977261

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有