HTTP核心模块

 2023-09-16 阅读 27 评论 0

摘要: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"

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.urlconsole.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 请求的路径
  • HTTP协议详解、响应对象的常用方法

    • 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")){//加载cssfs.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模板的使用

  • 设置网页中所有模块、官网

    • https://github.com/xtemplate/xtpl
  • 安装

    • npm install xtpl xtemplate --save
  • hadoop核心模块?xtemplate模板语法

    • https://github.com/xtemplate/xtemplate/blob/master/docs/syntax-cn.md
  • 使用

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

4. Express第三方框架

  • 中文文档

    • http://www.expressjs.com.cn/4x/api.html
  • 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放到不同的位置
  • 重做音乐播放器

转载于:https://www.cnblogs.com/bici/p/6040752.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/69729.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息