node知识总结

本文深入探讨了Node.js的核心概念,包括设计模式、工作方式、安装及首个程序。接着,介绍了模块系统,如创建、导出模块和路径管理。详细讲解了事件模块、HTTP模块和npm包管理,包括如何安装、升级和发布包。文章还涵盖了Express框架,创建Web服务器、使用nodemon以及处理路由和请求。最后,提到了环境变量和动态配置端口的重要性。
摘要由CSDN通过智能技术生成

简单了解node

node的设计模式

  1. node 由 V8 引擎封装的
  2. node 使 javascrip t可以运行在浏览器之外
  3. node 没有document 对象,没有bom dom window 等对象
    • 报错 document is not defined

node的工作方式

  • 异步 一个进程可以服务多个请求

安装node

  1. node -v 查看node的是否安装
  2. 一般安装稳定版本
  3. 一直点击下一步完成

第一个node程序

  • 运行node 在终端上,或者命令运行
  • 运行方式:
    • 在文件自身的位置上运行 可以在本地地址栏输入cmd
    • 在命令行里打开文件 使用cd命令切换
    • 运行是node 空格加 js文件
    node node文件.js
    

全局对象

  • node 没有 window 对象
  • node的全局对象是global

node的模块

  • 每一个文件就是一个模块
  • 模块内的作用域和函数模块外不可访问
  • 如果需要使用其他模块的内容需要导出

创建模块,导出模块

  • module对象的exports属性
  var url = 'http://myweb.com';
  function log(message) {
   
     consloe.log(message);
   }
   //导出对象
   module.exports.url = url
   module.exports.log = log 

加载模块

  • 使用 require 加载模块
    • const logger = require(‘./logger.js’)
    • logger.log(‘message’)
    • 看清楚文件位置
    • 可以不加扩展名 node 会自动添加
  • 一般定义为常量 避免重新赋值
  • 可以导出一个对象或者函数
    • module.exports = log 直接赋值
    • 直接调用函数 log(‘meaasge’)

模块包裹函数

  • node总是将自己包裹在一个函数里
  (function(exports,require,module,__filename,__dirname) {
   
    内容
})

注意点:

简写module.exports 为 exports 引用
简写之后就不能重置exports对象了,即使不能给exports对象赋值

路径模块

  • 导入内置模块
const path =  require('path')

操作系统模块

  • 导入模块
const os = require('os')

文件系统模块

const fs = require('fs')

events事件模块

node事件

EventEmitter是一个类 每个单词开头都要大写

const EventEmitter = require ('events')

创建一个对象

const emitter = new EventEmitter()

注册一个监听器 事件发生时被调用的函数

on 和 addListener 方法 on更加常用

on需要两个参数

1. 第一个是事件的名称
1. 第二个是回调函数 ,也就是实时的监听者
emitter.on('messageLogged',function() {
   
console.log('Listener called')
})

emit()方法是用来发起事件的

emitter.emit('messageLogged')

事件参数

​ 传递事件发生时的数据

emitter.on('messageLogged',(arg) =>{
   
console.log('Listener called',arg)
})

arg约定俗成 e或者eventArg

emitter.emit('messageLogged',{
   id:1,url:'http://'})

监听者可以得到事件的参数

class

如果你想要使用监听器来监测某个事件的发生,需要创建一个扩展来自EventEmitter的类,这个类就具有了EventEmitter的所有功能

http模块

const http = require('http')
const server = http.createServer()
server.on('connection',(socket)=> {
   
   consolr.log('New Connection')
})
server.listen(300
链表是一种常用的数据结构,用于存储一系列元素。C语言中,链表是通过指针来实现的,每个节点包含数据和指向下一个节点的指针。 以下是链表的基础知识总结: 1. 链表的定义: ```c struct Node { int data; struct Node* next; }; ``` 其中,data 表示节点存储的数据,next 表示指向下一个节点的指针。 2. 链表的操作: - 创建节点: ```c struct Node* createNode(int data) { struct Node* node = (struct Node*) malloc(sizeof(struct Node)); node->data = data; node->next = NULL; return node; } ``` - 插入节点: ```c void insertNode(struct Node* head, int data) { struct Node* node = createNode(data); node->next = head->next; head->next = node; } ``` 其中,head 表示链表头节点。 - 删除节点: ```c void deleteNode(struct Node* head, int data) { struct Node* p = head->next; struct Node* q = head; while (p != NULL) { if (p->data == data) { q->next = p->next; free(p); break; } q = p; p = p->next; } } ``` - 遍历链表: ```c void traverseList(struct Node* head) { struct Node* p = head->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } ``` - 销毁链表: ```c void destroyList(struct Node* head) { struct Node* p = head->next; while (p != NULL) { struct Node* q = p; p = p->next; free(q); } head->next = NULL; } ``` 3. 链表的优缺点: 链表的优点是插入和删除操作的时间复杂度为 O(1),而数组的时间复杂度为 O(n)。但是,链表的缺点是无法随机访问元素,需要遍历整个链表才能找到要查找的元素。此外,链表需要额外的空间来存储指向下一个节点的指针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈闲之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值