当前位置:   article > 正文

学习Node.js入门范例

学习Node.js入门范例

目标

Node.js 是一个基于Chrome V8引擎的JavaScript运行环境。

本篇将从零开始,学习官方文档提供的一个HelloWorld入门范例,即创建一个最简单的HTTP服务器

安装 Node.js

官网下载页面,我这里选择下载预构建的安装包:
在这里插入图片描述
运行下载好的安装包进行安装
在这里插入图片描述
如果安装成功,应该能在cmd中执行node -v查看版本
在这里插入图片描述

入门级范例

创建一个js文件,内容如下:

const { createServer } = require('node:http');

const hostname = '127.0.0.1';
const port = 3000;

const server = createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

我这里路径为 E:/Test/server.js
然后,cmd中运行命令node E:/Test/server.js
在这里插入图片描述
接着,就可以在浏览器中访问 http://localhost:3000/了:
在这里插入图片描述

解释范例的内容

1. 引入http模块

const { createServer } = require('node:http');
  • 1

其中:

  • require('node:http')意思是引入 http 模块。require定义见官方文档,它返回模块内容。
  • node:表示它是一个“核心模块”(官方文档)。“核心模块”就是在Node.js源代码中定义并被编译成二进制文件的模块。
  • {}花括号是JavaScript 的解构赋值(destructuring assignment)语法。这种语法可以让你从对象或数组中提取出数据,并赋值给变量。详见:Destructuring assignment - JavaScript | MDN。举例:
    在这里插入图片描述

所以这一行整体意思是:引入http模块,并将其中的createServer函数赋值给createServer变量,这样后续就可以直接使用 createServer 字符来调用这个函数了。但是其实也可以不使用上面的解构赋值,只引入模块:

const http = require('node:http');
  • 1

不过,这样后续要想调用函数时,那就需要带上http.了:

http.createServer
  • 1

官方文档给出了两个版本,CJS和MJS。
CJS:CommonJS 模块是 Node.js 最初支持的模块系统,它使用 require() 函数来导入模块
CMAScript 模块是 JavaScript 的标准模块系统,它使用 import 和 export 关键字来导入和导出模块。
(资料来源:一文搞懂 cjs 和 mjs 如何相互使用

2. 创建http服务器

const server = createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});
  • 1
  • 2
  • 3
  • 4
  • 5

createServer将创建并返回一个http.Server对象。函数定义见官方文档
在这里插入图片描述

关于文档中写的参数的语法,不确定准确的意思。据不可靠的资料说它是Extended Backus-Naur,不确定是否正确。唯一比较明确的是中括号[]表示这个参数是可选的。

createServer函数有两个可选参数 optionsrequestListener。此处只传入了 requestListener这个函数。

这里的requestListener会被自动加入 'request'事件中。所以此部分的代码也等价于:

const server = http.createServer()
server.on('request',(req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

其中.on 意思是添加事件,见官方文档
在这里插入图片描述

3. requestListener

requestListener就是这个函数:

(req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
}
  • 1
  • 2
  • 3
  • 4
  • 5

他有两个参数:

  • request (http.IncomingMessage对象):他提供请求详细信息,在这个简单的示例中未使用。
  • response (http.ServerResponse对象):用于将数据返回给调用者。

对于response :


res.statusCode = 200;
  • 1

200表示相应成功,其他数值详见官方文档


res.setHeader('Content-Type', 'text/plain');
  • 1

setHeader详见官方文档
在这里插入图片描述
它设置header中的一个属性。
此处设置了 Content-Type(内容类型)text/plain(纯文本)


res.end('Hello World');
  • 1

end函数详见官方文档
在这里插入图片描述
此方法向服务器发出信号,表明响应的header和正文均已发送;该服务器应该认为该消息是完整的。每个响应都必须调用该方法。
其中的 ‘Hello World’ 就是 data 参数,其实这段等价于:

res.write('Hello Worldqwert');
res.end();
  • 1
  • 2

4. 启动 HTTP 服务器侦听连接

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
  • 1
  • 2
  • 3

根据这里的资料,参数的意思分别为:

  • port:指定我们要监听的端口
  • hostname:指定我们要监听的IP地址
  • callback:指定添加监听后执行的函数
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/613161
推荐阅读
相关标签
  

闽ICP备14008679号