【JavaScript 】1. 什么是 Node.js?(JavaScript 服务器环境)

news/2025/3/15 17:42:43/

1. 什么是 Node.js?(JavaScript 服务器环境)

1.1 Node.js 定义

Node.js 是一个 基于 Chrome V8 引擎的 JavaScript 运行环境,用于运行 JavaScript 代码,特别适合 服务器端开发

特点:
非阻塞(异步 I/O) → 处理高并发请求更高效。
事件驱动 → 采用 Event Loop 机制,无需创建多个线程。
单线程 → 适用于 I/O 密集型应用(如 Web 服务器、API)。
npm(Node Package Manager) → 内置 npm,可安装丰富的第三方库。


1.2 企业中的 Node.js 应用

📌 案例 1:企业级 Web 服务器

场景:公司需要一个 快速响应的 Web 服务器,用于提供 REST API。
解决方案:使用 Node.js + Express.js 创建一个 HTTP 服务器

const http = require('http');const server = http.createServer((req, res) => {res.writeHead(200, {'Content-Type': 'text/plain'});res.end('Hello, World!\n');
});server.listen(3000, () => {console.log('Server running at http://localhost:3000/');
});

企业价值:高性能、支持大规模并发访问。


📌 讲义示例

讲义中的 API 服务器示例:

const express = require('express');
const app = express();
app.get('/', (req, res) => {res.send('Hello World!');
});
app.listen(3000, () => {console.log('Server running at http://localhost:3000/');
});

💡 讲义中的示例展示了如何使用 Node.js 结合 Express.js 创建 API 服务器


3. 什么是 API 路由?(定义 API 访问路径)

3.1 API 路由定义

API 路由 指的是 定义 URL 访问规则,让前端或第三方系统可以正确访问 API。

特点:
清晰的 URL 设计 → 避免 /getUser 这种不规范的写法。
基于资源的 RESTful 路由/users/:id 获取特定用户数据。
参数化 URL → 例如 /users/:id/orders 获取某个用户的订单。


3.2 企业中的 API 路由应用

📌 案例 3:订单管理 API

场景:公司需要提供 订单管理 API,前端应用调用以查询和创建订单。
解决方案:使用 Express.js 定义清晰的 API 路由

const express = require('express');
const app = express();
app.use(express.json());let orders = [{ id: 1, user: 'Alice', total: 50 }];// 获取所有订单
app.get('/orders', (req, res) => {res.json(orders);
});// 获取指定订单
app.get('/orders/:id', (req, res) => {const order = orders.find(o => o.id == req.params.id);order ? res.json(order) : res.status(404).json({ error: '订单不存在' });
});// 创建新订单
app.post('/orders', (req, res) => {const newOrder = { id: orders.length + 1, ...req.body };orders.push(newOrder);res.status(201).json(newOrder);
});app.listen(3000, () => {console.log('API 服务器运行在 http://localhost:3000');
});

企业价值:RESTful API 设计,前端、APP、合作方可调用相同 API 访问订单数据。


📌 讲义示例

GET /api/users
GET /api/users/:id
POST /api/users
PUT /api/users/:id
DELETE /api/users/:id

💡 企业 API 设计时,应该遵循 RESTful 路由设计,避免 /getUser 这样的不规范路径。


4. 什么是反向代理?(负载均衡和安全优化)

4.1 反向代理定义

反向代理(Reverse Proxy)位于客户端和服务器之间的代理服务器,用于提高性能、安全性、负载均衡

特点:
隐藏后端服务器 → 提供统一入口,保护真实服务器 IP。
负载均衡 → 把请求分配到不同服务器,减少单台服务器压力。
SSL 终止 → 代理服务器处理 HTTPS,减少应用服务器计算压力。


4.2 企业中的反向代理应用

📌 案例 4:Nginx 负载均衡

场景:企业需要高并发 API 服务器,防止单点故障。
解决方案:使用 Nginx 作为反向代理,分发请求到多个服务器

Nginx 配置:

server {listen 80;location /api/ {proxy_pass http://backend_servers;}
}upstream backend_servers {server backend1.example.com;server backend2.example.com;
}

企业价值:分流流量,提高系统稳定性,防止服务器崩溃。


📌 讲义示例

ifn666.com {handle /locallib/* {reverse_proxy localhost:3000}handle /carhire/* {reverse_proxy localhost:3005}
}

💡 示例展示了如何使用反向代理分发流量,提升后端 API 服务器性能。


总结

概念作用
Node.js运行 JavaScript 服务器代码
Express.jsNode.js Web 框架,简化 API 开发
API 路由设计清晰的 RESTful API 路由
反向代理提供负载均衡、隐藏服务器

你可以尝试:
用 Express.js 创建 REST API
配置 Nginx 反向代理


http://www.ppmy.cn/news/1579361.html

相关文章

安卓编译问题

看下这个是gradle里面配置的minsdk 版本有问题,需要从34改成30,这里面特意还指出了是哪个lib 能引用到,但是一直有红线说依赖有问题,是因为a用的implementation 一来的b, b又依赖了c 这个类在c里面,a模块引用不到 因为…

AI数字人源码开发---SaaS化源码部署+PC+小程序一体化

#数字人#数字人分身#123数字人#数字人分身源码部署搭建 AI数字人源码开发步骤 确定功能需求:首先确定需要实现的功能和特性,包括语音识别、自然语言处理、人脸识别等功能。这些功能将构成AI数字人的核心功能。 开发AI数字人源码:使用合适的…

STM32U575RIT6单片机(三)

作业1:使用中断控制光电开关打开蜂鸣器 volatile int flag0; //重写中断回调函数 void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin) //void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) {if(GPIO_PinPhotoElectric_Pin){flag1;} } void HAL_GPIO_EXTI_Fall…

【贪心算法4】

力扣452.用最少数量的剪引爆气球 链接: link 思路 这道题的第一想法就是如果气球重叠得越多那么用箭越少,所以先将气球按照开始坐标从小到大排序,遇到有重叠的气球,在重叠区域右边界最小值之前的区域一定需要一支箭,这道题有两…

Docker配置代理,以保证可以快速拉取镜像

序言 本来不想写了,然后记笔记了,但是今天遇到这个问题了再一次,还是写一写吧,加深一下印象 因为Docker被墙了,所以拉取Docker镜像的时候,需要通过代理的方式 xxxxxxxxxx,此处省略十几个字,然…

Axure设计之下拉多选框制作教程A(中继器)

如何使用Axure制作动态交互的下拉多选器组件?相信Web设计中多选器时长会在页面元素中被使用,产品原型制作为了更加流畅的说明需求,需要追求原型的高保真交互性,能让领导、客户还有开发人员清楚的知道功能,然而制作这样…

mysql学习-常用sql语句

1、安装mysql参考网上链接,进入mysql数据库 mysql -u root -p 2、数据库操作 2.1、创建数据库 create database 数据库名 default character set utf8; 2.2、显示所有数据库 show databases; 2.3、选择数据库 use elementInfo; 2.4、删除数据库 drop database…

LLM论文笔记 23: Meta Reasoning for Large Language Models

Arxiv日期:2024.6.17机构:THU / MSRA 关键词 meta-reasoning推理方法prompt engineering 核心结论 1. 提出Meta Reasoning prompting,MRP是一种系统提示方法,能够帮助LLM动态选择最合适的推理方法,从而提升其灵活性和…