ASCII码 ASCII码

node运行原理CPS、模块的导入、常用模块演示小结

发布于:2022-02-26 09:31:00  栏目:技术文档

1. node运行原理CPS

  • 回调函数做为参数传递给另外一个函数,并在操做完成时调用。这种传递结果的方法被称为CPS。
    • 个人理解简单来说就是回调的编程思想和模式。
    • 实际上,是经过将结果做为参数传递给另外一个函数(回调函数)来传递结果,而后在主体逻辑中调用回调函数拿到操做结果,而不是直接将其返回给调用者。
  1. // node编程模式CPS:回调与异步
  2. // 1. 传统风格:
  3. // 定义函数时,return并未执行,程序调用时才执行,并返回结果给调用的地方(调用者)
  4. function add1(a, b) {
  5. return "传统风格:" + (a + b);
  6. }
  7. // 下面调用时,函数执行结果返回调用者
  8. console.log(add1(5, 15));
  9. // 2. CPS风格:
  10. // 函数的参数a,b执行a+b,不直接用return返回,而是(a+b)结果传递给回调函数callback做为其参数使用
  11. // 回调函数callback可以灵活运用,通过(a+b)结果实现特定功能
  12. // 主体逻辑add2中调用回调函数拿到操做结果,而不是直接将其用return返回
  13. function add2(a, b, callback) {
  14. // (a+b)结果传递给回调函数callback做为其参数
  15. callback(a + b);
  16. }
  17. add2(6, 22, (res) => console.log(res));
  18. add2(18, 28, (res) => {
  19. // 1000倍
  20. console.log(res * 1000);
  21. });
  22. // add2是个同步的CPS函数
  23. console.log("开始");
  24. add2(6, 22, (res) => console.log(res));
  25. console.log("结束");
  26. // 显示如下:
  27. // 开始
  28. // 28
  29. // 结束
  30. // 3. 异步CPS函数
  31. function add3(a, b, callback) {
  32. setTimeout(() => {
  33. callback(a + b);
  34. }, 1000);
  35. }
  36. console.log("开始");
  37. add3(6, 22, (res) => console.log(res));
  38. console.log("结束");
  39. // 显示:
  40. // 开始
  41. // 结束
  42. // 28
  • Node中几乎每个API都使用了CPS异步风格来执行,遵循2个约定
    • 回调结尾: 回调参数始终是函数的最后一个参数
    • 错误优先: 回调传参时, 错误永远是第一个参数

2. Node的模块

Node模块风格: CommonJS

模块就是一js文件, 内部成员全部私有,只有导出才可以被访问

  • 核心模块: node内置
  • 文件模块: 自定义
  • 第三方模块: npm安装的

核心模块

  1. // 1. 核心模块无须声明,直接导入并使用
  2. // 例如https模块,创建web服务器
  3. const serverHttps = require("https");
  4. // fs模块,文件服务
  5. const serverFile = require("fs");

文件模块

  1. // 1. 核心模块无须声明,直接导入并使用
  2. // 例如http模块,创建web服务器
  3. const serverHttps = require("https");
  4. const serverFile = require("fs");
  5. // 2. 文件模块:先声明,再导入
  6. let hero = require("./mode1.js");
  7. console.log(hero.run());
  8. hero = require("./mode2.js");
  9. console.log(hero.run());

mode1.js

  1. // 声名模块文件
  2. // 模块中所有成员都是私有的,只有导出才能使用
  3. // 导出语法exports,它是一个对象,导出多个成员
  4. // 1. 逐个导出,给exports对象添加属性或方法导出
  5. exports.hero = "闪电侠";
  6. exports.superpowers = "神速力";
  7. exports.run = () => {
  8. return `${this.hero}的超能力是${this.superpowers}。`;
  9. };

mode2.js

  1. // 2. 统一导出
  2. // module.exports 是对象,可以赋值
  3. // 把module.exports作为当前模块中所有成员的“命名空间”来使用
  4. module.exports = {
  5. hero: "闪电侠",
  6. superpowers: "神速力",
  7. run() {
  8. return `${this.hero}的超能力是${this.superpowers}。`;
  9. },
  10. };

3. 演示http模块:web服务器

  1. // http模块
  2. // 导入模块
  3. var http = require("http");
  4. // 创建服务器方法,request为请求对象,response为响应对象
  5. http
  6. .createServer((request, response) => {
  7. // 写响应头,text/plain返回的是文本,text/html返回的是html
  8. // response.writeHead(200, { "Content-Type": "text/plain" });
  9. // 写入浏览器并结束
  10. // response.end("http模块创建的页面。");
  11. // text/html返回的是html
  12. // response.writeHead(200, { "Content-Type": "text/html" });
  13. // response.end("<h2>http模块创建的页面。</h2>");
  14. // application/json返回的是json
  15. response.writeHead(200, { "Content-Type": "application/json" });
  16. response.end(`
  17. {
  18. "hero":"闪电侠",
  19. "superpowers": "神速力"
  20. }
  21. `);
  22. })
  23. // 监听端口,回调函数
  24. .listen(8081, () => {
  25. console.log("服务已运行:http://127.0.0.1:8081/");
  26. });
  27. // 运行后就可访问http://127.0.0.1:8081/

4. 演示fs模块:文件模块

  1. // 引入模块
  2. const fs = require("fs");
  3. // Input.txt是读取的文件,err是错误处理,data是文件内容
  4. // 文件要指定路径
  5. fs.readFile(__dirname + "/input.txt", (err, data) => {
  6. // 判断错误
  7. if (err) return console.error(err);
  8. // data是二进制,转为文本
  9. console.log(data.toString());
  10. });

5. 演示path模块:解析路径

  1. // 定义字符串
  2. const str = "./php/node.js";
  3. // 引入模块
  4. const path = require("path");
  5. // 解析字符串的绝对路径
  6. console.log(path.resolve(str));
  7. // 显示:c:\www\php\node.js
  8. // 解析目录部分
  9. console.log(path.dirname(str));
  10. // 显示:./php
  11. // 文件名
  12. console.log(path.basename(str));
  13. // 显示:node.js
  14. // 扩展名
  15. console.log(path.extname(str));
  16. // 显示:.js
  17. // 转为对象
  18. console.log(path.parse(str));
  19. // 显示:{ root: '', dir: './php', base: 'node.js', ext: '.js', name: 'node' }
  20. // 对象转为字符串
  21. const obj = {
  22. root: "",
  23. dir: "./php",
  24. base: "node.js",
  25. ext: ".js",
  26. name: "node",
  27. };
  28. console.log(path.format(obj));
  29. // 显示:./php\node.js
相关推荐
阅读 +