Node.js HTTP核心模块
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("开启监听..."); });
浙公网安备 33010602011771号