ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Node Second Drive

2022-06-13 01:03:00  阅读:174  来源: 互联网

标签:Node console log require Drive Second const data celebrity


原视频地址:https://www.bilibili.com/video/BV1Gr4y1h7st?p=49&spm_id_from=pageDriver
本文归属:P18-P49

擅长异步IO的node

image

  • node保存了一些线程作为线程池,遇到文件读取等等异步操作时交给自己的某个线程单独处理;
  • 而对于网络请求,则直接与操作系统交互,毕竟操作系统更擅长网络通信。
  • 事件循环处理所有的回调事件

事件循环

node没有一个消息队列(或者说事件队列、回调队列)
事件循环分四个阶段,每个阶段有自己的消息队列
image

  • 定时器阶段
  • 轮询阶段
  • 检测阶段
  • 关闭阶段
    image

深入了解:https://nodejs.org/zh-cn/docs/guides/event-loop-timers-and-nexttick/

node的基础设计模式--观察者设计模式

// 1
const EventEmitter = require('events');
const celebrity = new EventEmitter();

// Subcribe to celebrity for Observer1
celebrity.on('race win', (result) => {
if (result === 'win') {
console.log('Congratulations!You are the best!')
}
});

// Subcribe to celebrity for Observer2
celebrity.on('race win', () => {
console.log('Boo i can be the best!')
});

process.on('exit',(code) => {
console.log('Process exit event with',code
})

celebrity.emit('race win');

// 2
const EventEmitter = require('events');
const celebrity = new EventEmitter();

// Observer 1
celebrity.on('race',(result) => {
    if (result === '‘'win') {
        console.log('You are the best!');
    }
});
// Observer 2
celebrity.on('race',(result) => {
    if (result === 'lost') {
        console.log('I can be better!');
    }
});

process.on('exit',(code) => { 
    console.log('Process exit event with:',code) // code 为0代表正常退出
})

celebrity.emit('race','win');
celebrity.emit('race','lost');

module

// P33 event.js
// 1
const http = require('http');

const req = http.request('http://www.baidu.com',(res) => {
 res.on('data',(chunk) => {
    console.log(`Data chunk:${chunk}`);
 });
 res.on('end',() => {
     console.log('No more data');
 });
});

req.end();


// 2
// const {request} = require('https');
const {get} = require('https');

const req = get('https://www.baidu.com',(res) => {
 res.on('data',(chunk) => {
    console.log(`Data chunk:${chunk}`);
 });
 res.on('end',() => {
     console.log('No more data');
 });
});

// req.end();


// P34,35 https.mjs
const { send } = require('./request');
const { read } = require('./response');

const makeRequest = (url, data) => {
    send(url, data);
    return read();
}

const resData = makeRequest('https://baidu.com', 'hello');
console.log(resData)

// P37 ES6写法:文件需要改成.mjs
// import { send } from './request.mjs'
// import { read } from './response.mjs'

// const makeRequest = (url, data) => {
//     send(url, data);
//     return read();
// }

// const resData = makeRequest('https://baidu.com', 'hello');
// console.log(resData)

console.log(require.cache)

// request.mjs
const REQUEST_TIMEOUT = 500;

const encrypt = (data) => {
    return 'encrypted data';
}

const send = (url,data) => {
    const  encryptedData = encrypt(data);
    console.log(encryptedData)
}

// module.exports = {
//     REQUEST_TIMEOUT,
//     send
// }

export {
    REQUEST_TIMEOUT,
    send
}

// response.mjs
const decrypt = (data) => {
    return 'decryted data'
}

const read = () => {
    return decrypt('data')
}

// module.exports = {
//     read
// }

export {
    read
}

·.mjs·文件格式用于ES6写法

node模块

  • 会缓存加载的模块,不会重复加载
const { send } = require('./request');
const { read } = require('./response');
const { REQUEST_TIMEOUT } = require('./request');

// 第二次加载来自'./request'的函数时,不会重新加载,而是在缓存中寻找
console.log(require.cache)
  • 使用index.js集成一个文件夹下的导出(这是node之父所反对使用的)
module.exports = {
	...require('./request'),
	...require('./response')
}

module vs package

npm init -y
// 初始化npm并全部选y。会得到package.json

Node_modules会保存npm包的完整源代码

Semantic Versioning 2.0.0

  1. 主版本号:当你做了不兼容的 API 修改,
  2. 次版本号:当你做了向下兼容的功能性新增,
  3. 修订号:当你做了向下兼容的问题修正。

nodemon

nodemon的出现,可以随时监听文件的变更,自动重启服务

标签:Node,console,log,require,Drive,Second,const,data,celebrity
来源: https://www.cnblogs.com/shixiu/p/16328447.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有