zoukankan      html  css  js  c++  java
  • HTTP核心模块

    1. HTTP协议

    • 请求报文
    • 响应报文

    2. HTTP模块

    • 使用之前的方式拼接响应报文
    let msg = "<h1>hello world</h1>";
    //构造响应报文
    let responseText = "HTTP/1.1 200 OK\r\n";
    responseText += "Server: mynodeserver 1.0\r\n";
    responseText += "Content-Length:"+ msg.length +"\r\n";
    responseText += "Content-Type: text/html;charset=utf-8\r\n";
    responseText += "\r\n";
    responseText += msg;
    
    socket.write(responseText);
    socket.end();
    
    • 使用http模块简化web服务器的开发
    "use strict";
    const http = require("http");
    let server = http.createServer((req,res)=>{
    
        //获取请求头      req.headers
        //获取http的版本  req.httpVersion
        //请求的方法      req.method
        //请求的路径      req.url
        console.log(req.headers);
        console.log(req.httpVersion);
        console.log(req.method);
        console.log(req.url);
    
        res.write("hhhhhh中文");
        res.end();
    }).listen(8888,()=>{
        console.log("开始监听...");
    });
    
    • 请求对象的常用属性

      • req.headers 获取请求头
      • req.method 请求的方法
      • req.httpVersion 获取http的版本
      • req.url 请求的路径
    • 响应对象的常用方法

      • res.end() 结束请求
      • res.write() 发送内容
      • res.setHeader("Content-Type","text/html;charset=utf-8");
    • 异常处理

    请求会有很多很多,如果一个请求出错会导致服务器挂掉,别的请求无法访问服务器.
    所以再做服务器开发的时候要保证如果一个请求出错,不影响其他请求
    
    如何处理异常:
    try{
    
    }catch(err){
        console.log("出错了:" + err);
        //此处要写日志,让程序员发现错误,进行修改
    }
    
    • 实现自己的模板,改变页面数据
    const http = require("http");
    const fs= require("fs");
    const  path = require("path");
    
    let server = http.createServer((req,res)=>{
    
        if(req.url.trim() === "/" || req.url.includes("index.html")) {
            //读取模板html文件
            fs.readFile("./template/tmp.html", (err, content)=>{
                let tmp = content.toString();
    
                let dataArr = require("./data.json");
    
                //变量数据,替换模板
                let array = [];
                for (var i = 0; i < dataArr.length; i++) {
                    let item = dataArr[i];
    
                    array.push("<li>"+item+"</li>");
                }
                tmp = tmp.replace("${list}",array.join(""));
    
                tmp = tmp.replace("${title}","列表");
                res.write(tmp);
                //结束请求
                res.end();
            });
        }else if(req.url.includes(".css")){
    
            //加载css
            fs.readFile(path.join("template",req.url) ,(err,content)=>{
                res.setHeader("Content-Type","text/css;charset=utf8");
                res.end(content);
            });
    
        }else if(req.url.includes(".jpg")) {
            //加载jpg的图片
            fs.readFile(path.join("image",req.url) ,(err,content)=>{
                res.setHeader("Content-Type","image/jpeg");
                res.end(content);
            });
        }else{
            res.end("你闹啥呢");
        }
    
    
    
    }).listen(8888,()=>{
        console.log("开启监听...");
    });
    

    3. xtpl模板的使用

    var xtpl = require('xtpl');
    xtpl.renderFile('./x.xtpl',{
        x:1
    },function(error,content){
    
    });
    
    • 音乐播放器

    4. Express第三方框架

    • 中文文档

    • express的安装

      • npm install express
    • 基本使用

    • 代码结构

      "use strict";
      const express = require("express");
      let app = express();
      app.get("/", (req,res)=>{
        res.setHeader("Content-Type","text/html;charset=utf8");
        res.write("我的天哪");
        res.end();
      });
      app.listen(8888,()=>{
        console.log("开始监听...");
      });
      
    • express的get
        app.get("/", (req, res) => {
            res.setHeader("Content-Type", "text/html;charset=utf-8");
            res.write("欢迎");
            res.end();
        });
        app.get("/photo", (req, res) => {
            res.write("<h1>没有照片</h1>");
            res.end();
        });
    
    • express的get获取参数 方式1
    //请求地址的形式  http://127.0.0.1:8888/post?id=1&token=abcd
    app.get("/post", (req, res) => {
    //解析url中的参数 方式1
    //let query = url.parse(req.url, true).query;
    //console.log(query.id);
    //console.log(query.token);
    
    //解析url中的参数 方式2
    //console.log(req.query);
    //console.log(req.query.id);
    ////过期的方法,不推荐使用
    //console.log(req.param("id"));
    res.write("ceshi");
    res.end();
    });
    
    • express的get获取参数 方式2
    //请求地址的形式  http://127.0.0.1:8888/zs/1002.html
    app.get("/:username/:id.html", (req, res) => {
        //获取参数
        console.log(req.params);
        console.log(req.params.username);
        res.send("haha");
    });
    
    • express的通配符,next跳到下一个路由
    //优先跟注册地址注册的顺序有关
    app.get("/*", (req, res, next) => {
        res.setHeader("Content-Type", "text/html;charset=utf-8");
        res.write("通配符哈<br>");
        next();
    });
    
    • express的post和all
    • send方法
    • 简化读取静态文件
    //app.use(express.static("template"));
    app.use("/public", express.static("template"));
    
    • 路由router
    "use strict";
    
    const express = require("express");
    
    let app = express();
    
    let mainRouter = express.Router();
    
    mainRouter.get("/main/list", (req, res) => {
        res.end("/main/list");
    });
    
    mainRouter.get("/main/haha", (req, res) => {
        res.end("/main/haha");
    });
    
    app.use("/", mainRouter);
    
    app.listen(8888, ()=>{
        console.log("正在加载...");
    });
    
    • 把不同功能的router放到不同的位置
    • 重做音乐播放器
  • 相关阅读:
    【html】http状态
    【Angular】Angular基础(3)
    【Angular】Angular基础(2)
    【Angular】Angular基础(1)
    【javascript】正则表达式match、exec和test的使用
    【javascript】js实现容器Map
    【JQuery】JQuery动态查找元素
    【leetCode】4. Median of Two Sorted Arrays
    【Java】Collection,set,List,Map介绍(附实例)
    【java】String类的基本方法
  • 原文地址:https://www.cnblogs.com/bici/p/6040752.html
Copyright © 2011-2022 走看看