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


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

    初始化 NodeJs 程序

    npm init -y
    
    • 1

    安装依赖

    pnpm add express
    pnpm add ts-node nodemon @types/node @types/express -D
    
    • 1
    • 2

    配置 nodemon

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

    {
      "watch": ["./"],
      "ext": ".ts,",
      "exec": "ts-node app.ts"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置启动脚本

    package.json 中配置启动脚本:

    {
      // /
      "scripts": {
        "dev": "nodemon"
      }
      ///
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    错误处理

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

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

    404 处理

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

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    问题记录

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

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

    // app.ts
    require("express-async-errors");
    
    • 1
    • 2
  • 相关阅读:
    JavaScript typeof操作符确认数据类型
    【云原生实战】KubeSphere实战——多租户系统实战
    【软件测试】小陈她的测试追梦之路,实习开端到测试第一人......
    推荐几个好用的短链接网址生成平台
    【SpringMVC】基础部分
    kubectl系列(三)-节点标签操作
    Server-Sent Events 一种轻量级的Push方式
    lc[数组]---706.二分查找
    [Java中将数据转JSON]
    接口测试--参数实现MD5加密签名规则
  • 原文地址:https://blog.csdn.net/Joey_Tribiani/article/details/134421033