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 便可访问服务器。