type
status
date
slug
summary
tags
category
icon
password
URL
确保防火墙开放了端口 888:
检查
888
端口是否允许访问:如果没有看到
888
,可以添加规则:如果你选择使用 pm2
:
- 安装
pm2
: 首先,你需要在服务器上全局安装pm2
。可以通过以下命令进行安装:
- 配置启动选项:
在宝塔面板中配置启动选项时,选择 自定义启动命令,并在命令框中输入以下命令来使用
pm2
启动应用:
这里的
/www/wwwroot/your-app-folder/app.js
是你的 Node.js 应用入口文件路径,而 "your-app-name"
是你给应用设置的名称。- 使用 pm2 启动 Node.js 应用:
通过
pm2
启动应用后,pm2
会帮助你管理进程,包括自动重启应用和查看日志等功能。你可以通过pm2
查看应用的状态、日志或进行其他管理操作。 - 查看应用列表:
- 查看日志:
- 删除日志:
- 启动应用:
- 宝塔面板自动启动
pm2
(可选): 如果你希望pm2
在服务器重启后自动启动,可以通过以下命令为pm2
设置开机自启:
然后运行显示的命令来完成设置。
express
Express 是一个基于 Node.js 的轻量级 Web 应用框架,用于快速构建 Web 应用程序和 RESTful API。它极大地简化了服务器端开发,提供了常用的功能和灵活的扩展能力。
简单来说:
- Express = Node.js 的“增效工具”,让你更轻松地构建和管理服务器。
Express 的作用
- 处理 HTTP 请求和响应:
- 通过简单的 API(如
app.get()
、app.post()
)轻松定义路由。 - 处理不同类型的请求(GET、POST、PUT、DELETE 等)。
- 管理请求参数、头部和响应数据。
- 提供中间件支持:
- 中间件是 Express 的核心概念,用于在请求到达目标处理逻辑之前或之后执行特定操作。
- 常见中间件功能:日志记录、权限验证、解析请求体、处理静态文件等。
- 支持路由管理:
- 路由器功能用于组织和管理 API 路由,将复杂的逻辑分成模块化文件。
- 构建 RESTful API:
- Express 非常适合构建符合 REST 规范的 API,便于前后端分离项目实现通讯。
- 支持扩展:
- 有丰富的第三方插件库,比如处理文件上传、实现身份验证、跨域资源共享(CORS)等。
用 Express 和不用 Express 写接口的区别
1. 没有 Express:使用纯 Node.js
用 Node.js 原生模块(如
http
模块)写接口,你需要自己处理许多基础功能。例如:- 解析请求路径和参数。
- 区分和处理 HTTP 方法(如 GET 和 POST)。
- 手动管理路由映射。
- 解析请求体(JSON、表单等)。
- 处理错误、响应头等。
- 缺点:
- 代码冗长:需要重复写大量样板代码。
- 不灵活:没有现成的工具处理复杂功能(如路由分组、权限验证等)。
- 易出错:基础功能(如解析请求体)需要手动实现,容易遗漏或出错。
2. 使用 Express
Express 抽象了许多常见任务,代码简洁且易读。例如:
- 优点:
- 简化路由管理:用
app.get()
、app.post()
轻松处理不同路径和方法。 - 内置功能丰富:例如请求体解析、错误处理等。
- 支持中间件:灵活扩展功能(如认证、日志)。
- 易维护:代码清晰,便于管理复杂项目。
总结对比
特性 | Node.js 原生模块 | Express |
学习曲线 | 较陡,需要了解底层原理 | 平缓,适合快速开发 |
代码简洁性 | 冗长,需要大量样板代码 | 简洁,减少重复代码 |
功能丰富性 | 需要手动实现解析、错误处理等 | 内置丰富功能,插件生态广泛 |
适合场景 | 小型或实验性项目,学习原理 | 中大型项目,快速构建 API 和服务 |
cors
CORS(跨源资源共享,全称 Cross-Origin Resource Sharing)是浏览器的一种安全机制,用来控制不同源之间的资源共享行为。
它允许服务器通过特定的 HTTP 响应头,告诉浏览器:
某些来自其他域(源)的请求是被允许的。
跨源访问的典型场景
- 同源:浏览器允许访问(协议、域名、端口必须完全一致)。
http://example.com:3000
和http://example.com:3000
是同源。
如:
- 跨源:当协议、域名或端口任意一个不同,就会触发跨域限制。
- 前端运行在
http://localhost:3000
,而后端运行在http://localhost:5000
,这是跨源访问。
如:
为什么会有跨域问题?
- 浏览器限制:现代浏览器出于安全考虑,会限制跨域请求,以防止恶意网站盗用用户数据。
- 实际需求:前后端分离开发中,前端需要通过 AJAX 或 Fetch 向不同域的后端请求数据。
如果没有配置 CORS,浏览器会拒绝前端发起的跨域请求。
CORS 的作用
CORS 通过添加 HTTP 响应头,告诉浏览器某些跨域请求是被允许的。例如:
Access-Control-Allow-Origin
:指定哪些域名可以访问资源。
Access-Control-Allow-Methods
:指定允许的 HTTP 方法(如 GET、POST 等)。
Access-Control-Allow-Headers
:指定允许的请求头。
如何在 Express 中解决 CORS?
1. 安装 cors
中间件
cors
是一个帮助 Express 处理跨域问题的库。- 安装:
2. 使用 cors
中间件
在服务器代码中引入并启用
cors
。此时,任何来源的请求都会被允许访问服务器上的资源。
3. 限制允许的源
如果你只想允许特定的来源访问,可以通过配置选项来限制:
- 动态配置:如果需要允许多个来源:
CORS 配置常用选项
origin
:- 定义允许的域,
'*'
表示允许所有来源。
methods
:- 指定允许的 HTTP 方法,如
GET, POST, PUT, DELETE
。
allowedHeaders
:- 指定允许的请求头(如
Content-Type
、Authorization
)。
credentials
:- 如果需要支持发送凭据(如 Cookie),设置为
true
。
示例:
总结
- CORS 是什么:
- 一种浏览器机制,防止未经授权的跨域访问。
- 安装
cors
库: - 使用
npm install cors
安装。
- 启用跨域支持:
- 使用
app.use(cors())
启用默认跨域配置。 - 或根据项目需求设置更精细的规则。
CORS 是前后端分离开发中的常见问题,用
cors
中间件处理跨域问题是最快捷、简单的方式。处理编码数据
1. body-parser
作用:
body-parser
是一个用于处理请求体数据的中间件。
- 它可以解析多种数据格式,将请求体的数据转为 JavaScript 对象,挂载到
req.body
中,方便服务器处理。
常见用途:
- 解析 JSON 数据(如 API 请求)。
- 解析 URL 编码数据(如表单提交的数据
application/x-www-form-urlencoded
)。
- 解析 纯文本 或 二进制数据。
安装必要性:
- 推荐安装:处理请求体数据是后端开发中的常见需求,
body-parser
大大简化了处理流程。
- 如果使用 Express 4.16.0 及以上版本,Express 已内置部分功能(
express.json()
和express.urlencoded()
),可以直接使用,而无需安装body-parser
。
安装:
使用:
注意:
- 如果使用的是 Express 内置方法,则改为以下写法:
2. cookie-parser
作用:
cookie-parser
是一个中间件,用于解析客户端发送的 Cookie。
- 它会将 Cookie 数据解析成 JavaScript 对象,挂载到
req.cookies
中,便于服务器读取和操作。
常见用途:
- 实现用户认证、会话管理等功能时,常需要操作 Cookie。
安装必要性:
- 推荐安装:虽然可以手动解析 Cookie,但
cookie-parser
提供了简单、稳定的解析功能,是 Express 项目中处理 Cookie 的标准工具。
安装:
使用:
注意:
- 如果需要签名的 Cookie(更安全),可以使用
cookieParser(secretKey)
,并通过req.signedCookies
获取签名的 Cookie。
3. multer
作用:
multer
是一个中间件,用于处理表单数据,特别是multipart/form-data
类型的表单(如文件上传)。
- 它将上传的文件存储到服务器指定的路径,或者存储在内存中,供后续处理。
常见用途:
- 上传图片、视频、文档等文件。
安装必要性:
- 必须安装:Node.js 原生无法直接处理
multipart/form-data
,如果项目涉及文件上传功能,就需要安装multer
。
安装:
使用:
注意:
dest
指定文件存储的目录,需确保该目录存在。
req.file
或req.files
中包含上传文件的详细信息(如文件名、路径等)。
总结
中间件 | 作用 | 是否必要 |
body-parser | 解析请求体数据(JSON、URL 编码、文本等) | 必要(或用 Express 内置功能) |
cookie-parser | 解析客户端 Cookie,将其转为对象 | 推荐 |
multer | 处理文件上传( multipart/form-data ) | 必要(涉及文件上传时) |
jsonwebtoken
作用:
jsonwebtoken
是一个库,用于生成和验证 JSON Web Tokens(JWT)。
- JWT 是一种基于 JSON 的开放标准(RFC 7519),用于在各方之间安全传输信息。
- 通常用于用户认证和授权,比如登录后生成的 token,前端携带 token 访问受保护的接口。
功能:
- 生成 Token:
- 服务端在用户登录成功后,使用用户信息生成 Token,并将 Token 返回给前端。
- 验证 Token:
- 前端将 Token 附加到请求头中,服务端验证该 Token 的有效性,确保请求合法。
安装必要性:
- 必要安装:如果你的项目使用 JWT 来实现身份验证或授权,就必须使用
jsonwebtoken
来生成和验证 Token。
安装:
使用:
特点:
- 支持自定义有效期(
expiresIn
)。
- 支持 payload 加密和签名。
- Token 是前后端分离认证的主流方案。
express-jwt
作用:
express-jwt
是一个 Express 中间件,用于自动验证请求中的 JWT。
- 它基于
jsonwebtoken
实现,简化了验证流程。
- 常用于保护需要授权访问的路由。
功能:
- 自动从请求头、查询参数或 Cookie 中提取 Token。
- 验证 Token 的有效性。
- 验证通过后,将解码后的用户信息挂载到
req.user
,便于后续处理。
安装必要性:
- 推荐安装:如果项目使用 Express 框架,并需要保护路由,
express-jwt
是一个高效的解决方案。
安装:
使用:
特点:
- 自动化 Token 验证,降低出错几率。
- 提供
unless()
方法灵活配置无需认证的路由。
- 验证失败会自动返回 401 错误。
jsonwebtoken
生成,express-jwt
自动验证
特性 | jsonwebtoken | express-jwt |
作用 | 手动生成和验证 Token | 自动验证 Token 并挂载解码后的数据到 req.user |
适用场景 | 用于所有项目,生成和验证 JWT 是核心功能 | Express 项目中,用于保护路由的授权中间件 |
安装必要性 | 必要安装 | 推荐安装 |
nodemon
nodemon
是一个用于 Node.js 开发的工具,它能够 自动重启 Node.js 应用,当你的代码发生变化时,不需要手动重启服务器。这对于开发时提升效率非常有帮助。作用
- 自动重启:
nodemon
会监视你的项目文件(如.js
、.json
、.mjs
等文件),当你修改文件时,它会自动重启 Node.js 应用程序,无需手动停止和启动应用。
- 提高开发效率:当你修改了代码后,无需每次都手动停止服务器并重新运行,
nodemon
会自动检测到代码变化并重启应用,节省了开发时的时间和精力。
安装必要性
- 必要性:
nodemon
在开发环境中非常有用,但在生产环境中不需要。它仅在开发过程中提升效率,因此通常作为开发依赖安装。
如何安装
1. 安装全局 nodemon
(推荐)
- 可以将
nodemon
安装到全局本机环境,这样可以在任何 Node.js 项目中使用nodemon
命令。
2. 使用 nodemon
启动项目
- 如果你已经安装了
nodemon
,可以通过以下方式启动你的 Node.js 应用: - 全局安装:你可以直接在命令行中使用
nodemon
启动应用:
3. 在 package.json
中配置
- 你还可以在
package.json
中配置nodemon
,这样你就可以通过npm run
命令来启动应用:
然后可以使用以下命令来启动:
总结
nodemon
是一个非常实用的开发工具,可以帮助开发者在代码修改时自动重启 Node.js 应用。
- 安装:你可以全局或本地安装
nodemon
,推荐在开发环境中使用它。
- 命令:使用
nodemon app.js
来启动你的应用,或者在package.json
配置脚本来使用npm start
。
- 作者:Orcatt
- 链接:https://orcatt.one/article/142e26e1-0cf3-80ab-98ce-c09f05953eef
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。