Node.js 初体验 | 如何使用 Node.js 开启一个简易的服务
·
什么是 Node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
一、主要特点
- 事件驱动和非阻塞 I/O 模型:
- 这使得 Node.js 可以在处理大量并发连接时非常高效。例如,在一个 Web 服务器应用中,它可以同时处理成千上万的客户端连接请求,而不会因为某个请求的阻塞而影响其他请求的处理。
- 当进行文件读取、网络请求等操作时,Node.js 不会等待这些操作完成后再继续执行下一个任务,而是立即返回继续执行后续代码,并在操作完成后通过回调函数来处理结果。
- 轻量级和高效:
- Node.js 具有较小的内存占用和快速的启动时间,非常适合构建可扩展的网络应用和微服务。
- 它的高效性使得开发者可以用较少的资源来运行复杂的应用程序。
- 单线程但支持高并发:
- 虽然 Node.js 是单线程运行的,但它通过事件循环和异步操作可以有效地处理大量并发请求。
- 开发者不需要担心多线程编程中的复杂问题,如线程同步和死锁。
二、应用场景
- Web 应用开发:
- 可以使用 Node.js 构建服务器端的 Web 应用,与前端 JavaScript 代码使用相同的语言,实现全栈开发。
- 流行的 Web 框架如 Express.js 和 Koa.js 提供了丰富的功能,方便开发者快速构建 Web 应用。
- 实时应用:
- 如聊天应用、在线游戏等需要实时交互的应用。Node.js 的事件驱动和非阻塞特性使得它能够快速响应客户端的请求,并实时推送数据给客户端。
- 命令行工具:
- 可以使用 Node.js 开发各种命令行工具,利用其强大的文件系统操作和网络功能。
- 例如,构建代码格式化工具、自动化脚本等。
- 微服务架构:
- 由于 Node.js 的轻量级和高效性,非常适合构建微服务架构中的各个服务。
- 每个微服务可以独立部署和扩展,提高系统的可维护性和可扩展性。
三、与其他技术的比较
- 与传统服务器端语言(如 Java、Python)相比:
- Node.js 的优势在于其事件驱动和非阻塞 I/O 模型,能够更好地处理高并发请求,并且具有更快的开发速度和更简单的部署过程。
- 然而,在处理复杂的计算任务和需要大量内存的应用时,传统语言可能更具优势。
- 与前端框架(如 React、Angular)相比:
- Node.js 主要用于服务器端开发,而前端框架用于构建用户界面。
- 但是,由于它们都使用 JavaScript,开发者可以在前后端共享代码和开发经验,提高开发效率。
下载 Node.js
创建一个 js 文件 01_server.js,写入以下内容:
// 导入 hhtp 模块
const http = require("http");
// 创建服务器实例
const server = http.createServer();
// 监听客户端请求事件
// req 是此次请求,res 则是此次请求的结果
server.on("request", (req, res) => {
console.log("客户端请求了一次");
const url = req.url; // 此次请求的 路径
const method = req.method; // 此次请求的 方法
console.log(`请求的地址是${url},方法是${method}`);
});
// 启动服务器
server.listen(8080, () => { // 8080 是服务开启在本机的 8080 端口
console.log("服务器启动成功!");
});
思路:
- 先从 node.js 里导入内置的 http 模块
- 使用 http 模块的 createServer 方法创建一个实例
- 在启动服务器之前,配置好监听客户端请求的事件函数 server.on(),里面进行一些对该请求的回应操作
- 最后开启服务,并配置端口,本地的 ip 地址为 localhost 或者 127.0.0.1,此次服务的地址为 127.0.0.1:8080
打开终端、开启服务
- 在终端进入 server.js 的文件夹目录下
- 使用 node server.js 命令开启服务

测试服务是否可用
测试方法一: 使用浏览器发起 GET 请求:
- 打开浏览器访问:localhost:8080 或者 127.0.0.1:8080
- 此时浏览器不会显示内容(因为还没有回应的逻辑)
- 终端会记录我们每一次的请求(浏览器刷新也算一次请求)
- 终端会记录请求的地址,地址默认为 /
- 可以请求 localhost:8080/index, 或者 127.0.0.1:8080/login

测试方法二: 使用 postman 软件发起 POST 请求:
1. 安装 postman: Postman
2. 注册登陆后使用:选择请求方法和地址

服务器回应
- 在 server.on 函数中:
- 定义服务器的回应:response,
- 使用 res.end() 方法结束此次访问并以 response 回应
const response = `这个地址是 ${url},方法是 ${method}`;
// 这里添加解决中文乱码的代码
res.end(response)
浏览器会得到乱码,但是在 postman 中不会

解决方案:设置响应头 setHeader:
添加代码:
res.setHeader("Content-type","text/html; charset=utf-8")
小案例:根据请求地址动态展示内容
// 导入 http 模块
const http = require("http");
// 开启服务
const server = http.createServer();
// 监听客户端
server.on("request", (req, res) => {
// 获取 url 地址,和方法
const url = req.url;
const method = req.method;
// 初始化 content 的值
var content = "";
// 判断请求路径,以展示不同的页面内容
if (url === "/" || url === "/index") {
content = "<h2>首页</h2>";
} else if (url === "/login") {
content = "<h2>登陆页</h2>";
} else {
content = "<h2>404 NOT FOUND</h2>";
}
// 回应内容
const response = `请求路径是${url},方法是${method}`;
// 设置响应头,可解决乱码问题
res.setHeader("Content-type", "text/html; charset=utf-8");
// 回应客户端
res.end(response);
});
// 开启服务器
server.listen("8080", () => {
console.log("服务已开启");
});
测试结果
index 页面:
login 页面:
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)