Nodejs | 青训营笔记

168 阅读2分钟

Nodejs | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

Nodejs 应用场景

1)跨平台:覆盖你能想到的面向用户的所有平台,传统的PC Web端,以及PC客户端 nw.js/electron 、移动端 cordova、HTML5、react-native、weex,硬件 ruff.io 等

2)Web应用开发:网站、Api、RPC服务等

3)前端:三大框架 React \ Vue \ Angular 辅助开发,以及工程化演进过程(使用Gulp /Webpack 构建 Web 开发工具)

4)工具:npm上各种工具模块,包括各种前端预编译、构建工具 Grunt / Gulp、脚手架,命令行工具,各种奇技淫巧等

4)工具:npm上各种工具模块,包括各种前端预编译、构建工具 Grunt / Gulp、脚手架,命令行工具,各种奇技淫巧等

Nodejs 架构

  • Node Standard Library 是 Node 专门提供给开发人员使用的标准库,如 Http, Buffer, fs 等模块。
  • Node Bindings 是沟通 JS 和 C++ 的桥梁,封装 V8 引擎 和 Libuv 的细节,向上层提供基础 API 服务。
  • 第三层是支撑 Node.js 运行的关键,由 C/C++ 实现。
    • V8 是 Google 开发的 JavaScript 引擎,提供 JavaScript 运行环境,可以说它就是 Node.js 的发动机。
    • Libuv 是专门为 Node.js 开发的一个封装库,提供跨平台的异步 I/O 能力.
    • C-ares:提供了异步处理 DNS 相关的能力。 http_parser、OpenSSL、zlib 等:提供包括 http 解析、SSL、数据压缩等其他的能力。

bindings

Node Bindings 是沟通 JS 和 C++ 的桥梁,封装 V8 引擎 和 Libuv 的细节,向上层提供基础 API 服务。

举个例子:C/C++ 实现了一个 http_parser 的库,非常高效,但是前端开发人员只会写 JavaScript,直接调用这个库肯定是不能成功的,所以就需要一个中间的桥梁。于是 Node.js 的作者就用 C++ 对 http_parser 库进行封装,使它符合某些要求(比如统一数据类型等),封装的文件叫做 http_parser_bindings.cpp。同时 Node.js 提供的编译工具可以将其编译为.node文件。这样 JavaScript 代码可以直接 require 这个 .node 文件,这样 JavaScript 就能调用 C++ 库。

用 Nodejs 写一个服务端

创建 serve.js 文件

// 1. 导入http模块
const http = require("http");

// 2. 创建一个web服务器对象
const server = http.createServer();

// 3. 监听请求事件
server.on("request", (req, res) => {
    //req-->request 请求对象, res-->response 响应对象
	// 通过响应头设置返回前台数据格式及编码。(解决中文乱码的问题)
    res.setHeader('Content-Type', 'text/html;charset=utf-8');
    //res.write()表示向客户端输出的方法
    res.write("hello world,你好nodejs")
    //res.end()每次响应完,需要调用此方法 来结束响束
    res.end();
})

// 4. 监听端口,为了避免端口冲突,这里给一个本机端口3000
server.listen(3000, () => {
    console.log("服务器启动成功");
}) 

启动服务器

node serve.js

访问服务器

打开任意浏览器,地址栏中输入 http://127.0.0.1:3000或者http://localhost:3000 便可访问服务器。