Node.js 笔记

106 阅读2分钟

Nodejs 可以做什么

  • 轻量级、搞性能的 Web 服务
  • 前后端 JavaScript 同构开发
  • 便捷高效的前端工程化

Nodejs 的架构

  • 最上层 Natives modules
    • 当前层内容由 JS 实现
    • 提供应用程序可直接调用库,例如 fs、path、http 等
    • JS 语言无法直接操作底层硬件设置
  • 中间层 Builtin modules ‘胶水层’
    • 帮助我们调用 C++ 函数,实现具体功能
  • 底层
    • V8:执行 JS 代码,提供桥梁接口,实现 JS 和 C++ 之间的转换功能,为 Nodejs 实现初始化操作

    • Libuv: 事件循环、事件队列、异步IO

    • 第三方模块:zlib、http、c-ares 等

image.png

Nodejs ts 实现

Nodejs 使用 ts 语法执行,依赖模块 typescript,需要使用 ts-node 执行文件,以 express 为例

初始化配置文件

npm init -y

建议全局安装 ts 和 ts-node

npm install -g typescript ts-node

ts 不支持使用 require 导入,因此使用 esModule 导入模块,同时默认安装的 express 没有导出 ts 类型,因此需要安装 express 的 ts 版本 @types/express

image.png

image.png

安装 @types/express

npm install @types/express -D

接下来,可以尝试把 package.json 文件发送给客户端

新建一个 data.ts 处理引入数据,ts 默认不支持导入 json 格式文件,需要在 tsconfig 配置文件中打开 resolveJsonModule

image.png

data.ts

import data from './package.json';

export default class DataRoot {
    static json = data
}

test.ts

import express from 'express'
import DataRoot from './data'

const app = express()

app.get('/', (req, res) => {
    res.json(DataRoot.json)
})

app.listen(9000, () => {
    console.log('listening on port 9000')
})

终端使用 ts-node 执行文件,就可以在浏览器上看到发送的数据拉

image.png

image.png

Nodejs 全局对象

常用的全局对象

  • __filename: 获取执行文件路径
  • __dirname: 获取执行文件所在目录

在浏览器环境中,有 window 全局对象,而在 node 环境中也有全局对象 global,它跟 window 的用法也是一样的

node 环境中的 this,默认情况下 this 并不是 global 全局对象,而在下面函数中,this 又是相等的,我们可以认为在 node 环境中,函数执行,会默认给我们传递一个 global 对象

console.log(this) // {}

// 默认情况 this 是空对象,和 global 并不是一样的

console.log(this == global); // false

(function () {
  console.log(this == global)
})() // true

process 全局变量

process 基于 nodejs 的全局对象,可以获取进程对象,例如获取 cpu 参数,执行命令参数等,process 的 API 有很多,不需要全部记住,大概有个印象就行

process 进程