使用 typescript + express 创建 NodeJs 后端服务

使用 typescript + express 创建 NodeJs 后端服务

初始化 NodeJs 程序

bash 复制代码
npm init -y

安装依赖

bash 复制代码
pnpm add express
pnpm add ts-node nodemon @types/node @types/express -D

配置 nodemon

在根目录创建nodemon.json来配置 nodemon:

json 复制代码
{
  "watch": ["./"],
  "ext": ".ts,",
  "exec": "ts-node app.ts"
}

配置启动脚本

在 package.json 中配置启动脚本:

json 复制代码
{
  // /
  "scripts": {
    "dev": "nodemon"
  }
  ///
}

由此,一个 typescript 版本的 NodeJs 工程就搭建好了。然后就开始安装 express 等依赖,来写业务代码了。

错误处理

根据官方文档的描述,express 是自带错误处理的逻辑的。当然如果 express 的错误处理逻辑不满足我们的业务规范,我们可以通过自定义 errorHandler 来统一处理错误,比如:

ts 复制代码
export const errorHandler: ErrorRequestHandler = function (
  err,
  req,
  res,
  next
) {
  try {
    res.status(500).send({ err: err.stack });
  } catch (error) {
    res.status(500).send(err);
  }
};

app.use(errorHandler);

**注意:**这里需要注意,我们自定义的错误处理 handler 需要放在其他的中间件和路由后面(You define error-handling middleware last, after other app.use() and routes calls;)

404 处理

编写 404 处理 handler 并且在其他的路由后面 use:

ts 复制代码
export const notFoundHandler: Router = Router().use((req, res) => {
  res.status(404).sendFile(resolve(__dirname, "../../public/404.html"));
});

app.use(mainHandler);
app.use(authHandler);
app.use("/api/auth", authRouter);
app.use("/api/user", userRouter);
app.use("/api", indexRouter);
// *
// *
// *
// *
app.use("*", notFoundHandler);
app.use(errorHandler);

问题记录

使用 express-async-errors 处理异步错误

描述:如果我们用 async 和 await 去拦截代码错误,需要使用 try catch 去拦截错误,每个接口都这样去做太麻烦了,因此使用 express 本身的错误处理加上第三方库 express-async-errors 来处理:

使用文档:官方文档, CSDN

ts 复制代码
// app.ts
require("express-async-errors");
相关推荐
星栈11 小时前
pnpm 12 升级实测
前端·javascript
传奇开心果编程11 小时前
【SwiftUI提高练中学】第13课 实时活动与灵动岛:ActivityKit 实战
学习·ui·ios·swiftui·swift
欣欣之王来了11 小时前
Python入门:什么是Python以及为什么选择它
学习·架构·面向对象·项目·python教程
Sirens.11 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
Ai-_Man11 小时前
您您这可以把Microsofat Copilot的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑·copilot
dadaobusi11 小时前
pcie原子操作和nvme原子操作
学习
sunshine22 girl12 小时前
Java学习五 面向对象高级5 内部类1
java·学习
特创数字科技12 小时前
一个纯本地运行的图片处理工具:压缩 / 裁剪 / 九宫格 / 圆角 / 滤镜 / 拼图 / 水印,终生使用
前端
IT_陈寒13 小时前
Vue的v-if和v-for混用居然是个天坑
前端·人工智能·后端
天衍四九-13 小时前
【无标题】
前端·spring boot·mysql·nginx·docker