使用Node.js和Express实现安全API的现代方法
TypeScript 的类型安全性和更好的工具结合,可以显著提升代码的长期可维护性和质量。然而,要让所有功能顺利运行并非易事,尤其是在 ESM(ECMAScript 模块)日益普及的背景下。随着越来越多的工具(如 ESM 专用软件包)的出现,开发者可能会遇到模块解析和导入语法冲突等问题。
本文将逐步指导您如何使用 Express 和 TypeScript 构建支持 ESM 的安全现代 Node.js 应用程序,包括启用文件热重载和集成 Arcjet 提升 API 安全性。
初始化项目
首先,创建一个新目录并初始化一个新的 Node.js 项目:
mkdir node-express-api
cd node-express-api
npm init -y
这将生成一个具有默认设置的 package.json 文件。
安装依赖项
安装 Express.js 和 TypeScript 相关的软件包:
npm install express
npm install --save-dev typescript ts-node @types/express
express:Web 框架。typescript和ts-node:提供 TypeScript 支持。@types/express:Express 的 TypeScript 类型定义。
配置 TypeScript
安装完基础依赖项后,需要为项目配置 TypeScript。运行以下命令初始化 TypeScript 配置:
npx tsc --init
这将在项目根目录生成一个 tsconfig.json 文件。更新该文件以确保一切按预期运行:
{
"compilerOptions": {
"module": "ESNext",
"target": "ESNext",
"moduleResolution": "node",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"skipLibCheck": true,
"outDir": "./dist"
},
"include": ["src/**/*"]
}
设置 Express API 服务器
接下来,使用 TypeScript 创建一个基本的 Express.js 服务器。首先,创建 src 目录和入口文件:
mkdir src
touch src/app.ts
编辑 src/app.ts 文件,添加以下代码以启动 Express 服务器:
import express from "express";
const app = express();
const port = 3000;app.get("/", (req, res) => {
res.status(200).json({ message: "Hello World" });
});app.listen(port, () => {
console.log(应用程序正在监听 http://localhost:${port});
});
此代码设置了一个监听端口 3000 的基本 Express 服务器,并包含一个返回 JSON 格式欢迎消息的路由。
启用热重载
在开发环境中,每次修改代码后自动重启服务器非常有用。可以通过安装 nodemon 实现:
npm install --save-dev nodemon
创建一个 nodemon.json 文件,配置 nodemon 以监视 TypeScript 文件的更改:
{
"watch": ["src"],
"ext": "ts",
"ignore": ["dist"],
"exec": "node --loader ts-node/esm src/app.ts"
}
在 package.json 中添加一个脚本以运行 nodemon:
"scripts": {
"dev": "nodemon"
}
此外,为了支持 ESM,需要对 package.json 进行以下更新:
- 删除
"main": "index.js"。 - 添加
"type": "module"。
更新后的 package.json 示例:
{
"name": "node-express-api",
"version": "1.0.0",
"type": "module",
"scripts": {
"dev": "nodemon"
}
}
测试服务器
运行以下命令启动开发服务器:
npm run dev
此时,Express 服务器将启动,并在修改 TypeScript 文件时自动重新加载。
集成 Arcjet 提升安全性
Arcjet 是一个中间件工具,可以通过减轻机器人攻击、滥用和其他网络安全威胁来增强 API 的安全性。
首先,安装 Arcjet 的 Node.js 包:
npm install @arcjet/node
配置环境变量(如开发模式和 Arcjet 密钥):
export ARCJET_ENV=development
export ARCJET_KEY=your_arcjet_key
更新 src/app.ts 文件,添加 Arcjet 中间件:
import express from "express";
import Arcjet, { detectBot, shield } from "@arcjet/node";
const app = express();
const port = 3000;const aj = Arcjet({
key: process.env.ARCJET_KEY!,
rules: [
shield({ mode: "LIVE" }),
detectBot({ mode: "LIVE" })
]
});app.use(async (req, res, next) => {
const decision = await aj.project(req);
if (decision.isDenied()) {
if (decision.reason.isRateLimit()) {
return res.status(429).json({ message: "请求过多" });
} else {
return res.status(403).json({ message: "拒绝访问" });
}
}
next();
});app.get("/", (req, res) => {
res.status(200).json({ message: "Hello World" });
});app.listen(port, () => {
console.log(应用程序正在监听 http://localhost:${port});
});
更新 nodemon.json 以加载环境变量:
{
"watch": ["src"],
"ext": "ts",
"ignore": ["dist"],
"exec": "node --env-file .env.local --loader ts-node/esm src/app.ts"
}
生产环境构建
为了将应用程序部署到生产环境,需要设置构建和启动脚本。在 package.json 中添加以下内容:
"scripts": {
"dev": "nodemon",
"build": "tsc",
"start": "node dist/app.js"
}
运行以下命令编译 TypeScript 文件:
npm run build
编译后的 JavaScript 文件将输出到 dist 目录。运行以下命令启动生产服务器:
npm start
总结
通过本文的指导,您已经成功构建了一个现代化的 Node.js API,集成了 TypeScript 和 Arcjet,具备了类型安全性和增强的安全性。TypeScript 的引入提高了代码的可靠性和可维护性,而 Arcjet 则为 API 提供了强大的安全保护。
这种结合不仅让您的 API 更加安全,还为未来的扩展和维护奠定了坚实的基础。
原文链接: https://blog.arcjet.com/a-modern-approach-to-secure-apis-with-node-js-express-typescript-and-esm/
最新文章
- 函数调用与工具使用入门 – Apideck
- 什么是API测试?其优势、类型及最佳实践
- API 安全策略和基础指南
- 如何在Python、PHP、Ruby中使用今日头条热搜榜API
- 如何获取文心一言 API Key 密钥(分步指南)
- 2025 ComfyUI 稳定扩散流水线|拖拽式节点化+API 集成教程
- Flask-Limiter:为 API 添加访问速率限制的 Python 扩展!
- OpenAI o1原理逆向工程图解
- 性别预测API:如何让名字背后的性别信息一目了然?
- 小红书AI文章风格转换:违禁词替换与内容优化技巧指南
- REST API 设计:过滤、排序和分页
- 如何获取 Coze开放平台 API 密钥(分步指南)