赞
踩
Node.js 是一个基于Chrome V8引擎的JavaScript运行环境。
本篇将从零开始,学习官方文档提供的一个HelloWorld入门范例,即创建一个最简单的HTTP服务器。
官网下载页面,我这里选择下载预构建的安装包:
运行下载好的安装包进行安装
如果安装成功,应该能在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}/`);
});
我这里路径为 E:/Test/server.js
然后,cmd中运行命令node E:/Test/server.js
接着,就可以在浏览器中访问 http://localhost:3000/
了:
const { createServer } = require('node:http');
其中:
require('node:http')
意思是引入 http
模块。require
定义见官方文档,它返回模块内容。node:
表示它是一个“核心模块”(官方文档)。“核心模块”就是在Node.js源代码中定义并被编译成二进制文件的模块。{}
花括号是JavaScript 的解构赋值(destructuring assignment)语法。这种语法可以让你从对象或数组中提取出数据,并赋值给变量。详见:Destructuring assignment - JavaScript | MDN。举例:所以这一行整体意思是:引入http模块,并将其中的createServer函数
赋值给createServer变量
,这样后续就可以直接使用 createServer 字符来调用这个函数了。但是其实也可以不使用上面的解构赋值,只引入模块:
const http = require('node:http');
不过,这样后续要想调用函数时,那就需要带上http.
了:
http.createServer
官方文档给出了两个版本,CJS和MJS。
CJS:CommonJS 模块是 Node.js 最初支持的模块系统,它使用 require() 函数来导入模块
CMAScript 模块是 JavaScript 的标准模块系统,它使用 import 和 export 关键字来导入和导出模块。
(资料来源:一文搞懂 cjs 和 mjs 如何相互使用 )
const server = createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
createServer
将创建并返回一个http.Server
对象。函数定义见官方文档。
关于文档中写的参数的语法,不确定准确的意思。据不可靠的资料说它是Extended Backus-Naur,不确定是否正确。唯一比较明确的是中括号
[]
表示这个参数是可选的。
createServer
函数有两个可选参数 options
和 requestListener
。此处只传入了 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');
});
其中.on
意思是添加事件,见官方文档
requestListener
就是这个函数:
(req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
}
他有两个参数:
对于response :
res.statusCode = 200;
200
表示相应成功,其他数值详见官方文档
res.setHeader('Content-Type', 'text/plain');
setHeader
详见官方文档
它设置header中的一个属性。
此处设置了 Content-Type(内容类型) 为 text/plain(纯文本)
res.end('Hello World');
end
函数详见官方文档
此方法向服务器发出信号,表明响应的header和正文均已发送;该服务器应该认为该消息是完整的。每个响应都必须调用该方法。
其中的 ‘Hello World’ 就是 data 参数,其实这段等价于:
res.write('Hello Worldqwert');
res.end();
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
根据这里的资料,参数的意思分别为:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。