影子的知识库

影子的知识库

  • 知识库
  • GitHub

›Node 基础

JVM系列

  • JVM内存区域
  • 对象创建-布局-访问
  • 内存溢出实战
  • 内存区域回收
  • 四大引用
  • 垃圾回收算法
  • HotSpot回收算法细节

Java系列

  • java注解
  • springboot请求参数绑定
  • springboot请求参数校验框架
  • YAML语法
  • 动态代理
  • classpath和java命令
  • springboot-aop编程
  • springboot统一异常处理
  • springboot数据库和事务
  • springboot拦截器
  • springboot中的web配置
  • docker的简单开发
  • springboot自动配置
  • 数据库的隔离级别
  • springboot监控
  • java类加载
  • java-agent的相关内容
  • 类加载器详解
  • java的SecurityManager
  • maven学习

Node

    JS 基础

    • 语法基础和数据类型
    • 数据类型转换
    • 语句 表达式 运算符
    • 变量与对象
    • 函数
    • 数据处理
    • 常用 API
    • 重点知识

    ES6

    • 块级作用域
    • 字符串和正则表达式
    • 函数
    • 对象
    • Symbol
    • Set和Map
    • 迭代器和生成器
    • 类
    • 数组
    • Promise

    Node 基础

    • 模块系统
    • package.json
    • 内置对象
    • npm脚本的使用
    • Buffer
    • Stream
    • 事件循环机制
    • 示例代码

    stream系列

    • 流的缓冲
    • 可读流
    • 可写流
    • 双工流和转换流
    • 自定义流

后期计划

  • 学习计划
  • 专题研究计划
Edit

本文内容

本文主要是一些示例代码,用来练习使用 node

参考:《node.js 硬实战》

1.安装与加载模块

问题

你想从 npm 加载一个第三方模块。

解决方案

从命令行工具 npm 安装模块,然后通过 require 加载模块,例如

$ npm search express
express Sinatra inspired web development framework
$ npm install express
npm WARN node_start@1.0.0 No description
npm WARN node_start@1.0.0 No repository field.

+ express@4.17.1
added 50 packages from 37 contributors and audited 128 packages in 9.79s
found 0 vulnerabilities
$ node
> var express = require('express');
> typeof express
'function'
  • 通过关键字搜索模块
  • 通过 require 加载模块
  • 模块被安装在 ./node_modules 目录下
  • npm install -g 模块名 将模块安装在全局目录下,linux 是 /usr/local/lib

2.判断 node 加载了哪个模块 && 卸载模块

要判断 node 具体加载了哪个模块 ,可以通过 require. resolve(id),这将返回文件的绝对路径。

卸载模块:delete require('./circle.js');

3.加载一组相关的模块

问题

你希望将一个目录下的相关文件组合起来,而且只需要通过一个 require 来加载这些模块。

解决方案

创建一个叫作 index.js 的文件来加载各个模块并把它们一起导出,或者在文件夹下添加一个 package.json 文件。

module.exports = {
    one: require('./one'),
    two: require('./two'),
}

这样相当于一次加载了内部的两个模块

4.读取相对路径的文件

问题

有时候我们需要读取一些相对路径的文件

解决方案

通过 __dirname 和 __filename 来找到文件的位置,例如读取相对于本文件上层目录的 views/view.html

var view = __dirname + '/view/view.html'

这个实际上在 windows 和 linux 下都能跑过去,windows API 实际上是看得懂的,当然,如果要更标准的话,那么还是使用 path 模块,例如:

var path = require('path');
var view = path.join(__dirname, 'view', 'view.html');
console.log(view);

5.打印进程进度

有时候,我们可能需要进程定时打印 ... 来表示进程还在执行,用户体验会好一点。

setInterval(() => process.stdout.write('.'), 10).unref()

重点是最后的 unref() ,它表示 setInterval 返回的 Timeout 对象不需要 Node.js 事件循环保持活动状态。 如果没有其他活动保持事件循环运行,则进程可以在调用 Timeout 对象的回调之前退出。

如果没有最后的调用,那么进程在完成真正该干的事情后,就无法退出了,因为事件循环一直没有结束

Last updated on 11/8/2020
← 事件循环机制流的缓冲 →
  • 1.安装与加载模块
  • 2.判断 node 加载了哪个模块 && 卸载模块
  • 3.加载一组相关的模块
  • 4.读取相对路径的文件
  • 5.打印进程进度
影子的知识库
Docs
Getting Started (or other categories)Guides (or other categories)API Reference (or other categories)
Community
User ShowcaseStack OverflowProject ChatTwitter
More
BlogGitHub
Copyright © 2020 Cen ZhiPeng