效率至上的nodejs 手动实现服务器

作者 : 开心源码 本文共3751个字,预计阅读时间需要10分钟 发布时间: 2022-05-12 共162人阅读

这是一个连续的node学习笔记, 本文是第一章, 会持续升级, 持续完善

  • python好使用,使用久了就会把人的脾气养起来, nodejs不好使用, 但效率很好, 也能彻底治好你的坏脾气
  • nodejs的回调是我使用过的最蛋疼的编程方式之一, 但也足够巧妙, 学好node, 对一个程序员而言, 也是一个稳赚不赔的买卖
  • 废话不多说, 上代码

1. 完成环境的搭建, 运行一个正则,提取字符串中的数字

let numRe = /\d+/g;console.log("123dsgfas 12434 sdfasdf234dagsdfg".match(numRe));


nodejs的语法和浏览器js的语法非常接近, 安装好node后, 可以写个正则, 测试一下环境能否安装成功, 通过atom的script插件容易造成端口占使用,建议学习过程中使用命令行工具执行node脚本, 如node HelloWorld.js

2. http板块开启一个服务

const http = require("http")//开启一个监听8080端口的静态服务http.createServer(function(req, res){  console.log("==>", req.url);  if (req.url === "/1.html"){    res.write("you have request 1.html");  }else if (req.url === "/2.html") {    res.write("you have request 2.html");  }else{    res.write("404(page not found)");  }  res.end();}).listen(8080)

开启服务,分三步:

  • 第一步: 引入板块
  • 第二步: 调使用板块http.createServer
  • 第三步: 监听端口http.createServer(function(req, res){}).listen(8080)

3. fs板块读写文件

const fs = require("fs");// 写入文件fs.writeFile("HelloWorld.txt", "HelloWorld HelloNode", function(err){  if(err){    console.log(err);  }  // 读取刚刚写入的数据  else{    fs.readFile("HelloWorld.txt", function(err, data) {      if(err){        console.log(err);      }else{        console.log(data.toString());      }    })  }})

简单读写文件非常简单, 与其它编程语言相似, 把调使用方法背过即可以了

4.实现一个静态http服务器

const http = require("http");const fs = require("fs")http.createServer(function(req, res){  // 打开 www/ 目录下的文件  fs.readFile("./www/"+req.url, function(err, data) {    if(err){      console.log(err);      res.write("404");      res.end();    }else{      console.log(data.toString())      res.write(data);      res.end();    }  })}).listen(8080)

通过了读取www/目录下的文件, 实现了静态资源服务器

5.获取get数据

const http = require("http");const url = require("url");http.createServer(function(req, res){  let reqObj = url.parse(req.url, true)  let urlPath = reqObj.path;  let urlData = reqObj.query;  let log = "==>urlPath:" + urlPath +"==>>urlData:"+ JSON.stringify(urlData);  console.log(log);  res.write(log);  res.end();}).listen(6060)

解析get请求的参数

6.获取post数据

const http = require("http");const querystring = require("querystring");http.createServer(function(req, res){  let dataStr = '';  let i = 0;  req.on("data", function(data){    dataStr+=data;    console.log(`第${i++}次收到数据`);  })  req.on("end", function(){    console.log("end");    let parseData = querystring.parse(dataStr);    console.log("parseData:", parseData);    res.write(new Buffer(dataStr, "utf8"));    res.end();  })}).listen(8800)

解析post请求的参数

小结: 使用已有知识 实现简单的服务器程序

const http = require("http");const fs = require("fs");const querystring = require("querystring");/**1. 访问www内的静态资源*2. 解析get请求, 并保存到serverLog.txt*3. 解析post请求serverLog.txt*/// 获取当前时间function getNowDate(){    let dt = new Date();    let year = dt.getFullYear();    let month = dt.getMonth();    let day = dt.getDate();    // 将月份加1    month = month + 1;    // 将月份补齐到两位    if (month <= 9){        month = "0" + month;    }    // 将日补齐到两位    if (day <= 9){        day = "0" + day;    }    let hour = dt.getHours();    let minutes = dt.getMinutes();    let seconds = dt.getSeconds();    return year+"-"+month+"-"+day+"-"+hour+"-"+minutes+"-"+seconds;}http.createServer(function(req, res){  // 1. 尝试访问www下的静态资源  fs.readFile("./www"+req.url, function(err, data){    if(err){      //2. 解析请求的参数, 并保存到log      if(req.method === "GET"){        console.log("收到了GET请求")        let getData = querystring.parse(req.url.split("?")[1]);        console.log("取得的get数据为==>",getData);        fs.writeFile("./serverLog.txt", getNowDate()+"\n"+JSON.stringify(getData)+"\n", {flag: 'a'},function(err){          if(err){            console.log(err);            console.log("GET数据保存至log出错");          }        });      }else if (req.method == "POST") {        console.log("收到了POST请求")        let tmpData = ''        req.on("data", function(data){          tmpData+=data;        });        req.on("end", function(){          let postData = querystring.parse(tmpData);          console.log("取得的post数据为==>", postData);          fs.writeFile("./serverLog.txt",getNowDate()+"\n"+JSON.stringify(postData)+"\n", {flag: 'a'},function(err){            if(err){              console.log(err);              console.log("POST数据保存至log出错");            }          });        })      }      res.write("404");      res.end();    }else{      res.write(data);      res.end();    }  })}).listen(8000)
  • python测试脚本
import requestsrequests.get("http://127.0.0.1:8000/?name=zhaozhao&age=18&method=GET")requests.post("http://127.0.0.1:8000", data={"name": "zhaozhao", "age": 18, "method": "POST"})



熟习了nodejs回调机制, 使用原生nodejs写服务器程序是一件很有效率的事情 , 测试脚本还是requests好使用!

上一篇 目录 已是最后

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 效率至上的nodejs 手动实现服务器

发表回复