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 等
-
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
安装 @types/express
npm install @types/express -D
接下来,可以尝试把 package.json 文件发送给客户端
新建一个 data.ts 处理引入数据,ts 默认不支持导入 json 格式文件,需要在 tsconfig 配置文件中打开 resolveJsonModule
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 执行文件,就可以在浏览器上看到发送的数据拉
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 有很多,不需要全部记住,大概有个印象就行