Blogger Information
Blog 29
fans 0
comment 0
visits 14944
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
node运行原理CPS、模块的导入、常用模块演示小结
cool442
Original
531 people have browsed it

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
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post