后端开发简介

后端开发的主要范畴是开发数据服务 API,使前端可以调用后端的服务对数据进行增、删、改、查,从而实现对前端请求的响应。

要开发一个后端应用程序,一般不会从零开始做,而会直接使用一些功能完备的框架,快速开发程序功能。本节先介绍几款主流的后端框架,然后再详述 Express 框架的用法。

常用的后端框架

Express

Express 是一款基于 Node.js 平台的快速、开放、完善的 Web 开发框架,是目前最流行的后端框架之一,也是最成熟的框架之一。它为服务器端应用提供了完善的功能,如请求上下文、路由、中间件、模板引擎、静态资源服务等,要扩展其功能也极方便。目前有许多流行的开发框架基于 Express 构建。

Koa

Koa 是一款极简的后端框架。通过利用 async() 函数,它放弃了传统回调函数的做法,避免产生回调灾难。Koa 没有捆版中间件,而提供了优雅的办法来协助编写服务器端应用程序,它不仅提供了请求上下文、中间件等基础功能,还可以通过 async/await 写出更简洁的代码,开发者可根据需求开发自定义框架。

NestJs

NestJs 是一款完备的、企业级的、渐进式的后端框架。它支持 TypeScript,并结合了面向对象编程(Object Oriented Programming,OOP)、函数式编程(Functional Programming,FP)和函数响应式编程(Functional Reactive Programming,FRP)的相关理念,从模块拆分到微服务模型都提供了完整的解决方案。它的框架底层是基于 Express 实现的,因此拥有完善的第三方支持。

Hapi.js

Hapi.js 是一款用于构建基于 Node.js 的应用和服务的富框架,它的应用使开发者可以把重点放在建立便携、可重用的应用逻辑而不是构建架构上。它内置了输入验证、缓存、认证和其他 Web 应用开发的常用功能。它没有默认中间件,但提供了强大的插件。

Express框架的用法

目前,Express 是主流的框架。本节将以 Express 框架为例,介绍基于 TypeScript 语言的后端开发,以及如何搭建一个基础的后端服务。

假设当前项目目录为 D:\TSProject\server-side,首先,执行以下命令安装 Express 及其对应的声明文件库。

$ npm install express
$ npm install @types/express -D

然后,使用 tsc --init 命令创建 ts.config 文件,在文件中添加 rootDir 编译选项和 outDir 编译选项,将待编译的 TypeScript 源文件根目录设置为 ./src,并将编译后的 JavaScript 文件的输出目录设置为 ./dist

{
  "compilerOptions": {
    "target": "es2016",
    "module": "commonjs",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true,
    "rootDir": "./src",
    "outDir": "./dist"
  }
}

接下来,在项目根目录下创建 src 文件夹,并在文件夹中创建 index.ts 文件,src/index.ts 文件的内容如下。

import express from 'express';
const app = express();
const port = 8000;

app.get('/hello', (req, res) => {
    res.send("hello world!");
});

app.listen(port, () => {
    return console.log(`Express is listening at http://localhost:${port}`);
});

以上代码中从 express 库中导入了 express 对象,通过调用 express() 函数初始化 express 服务器对象,并设置端口为 8000,然后通过 app.get 创建一个 API,其相对路由为 /hello,访问方法为 get。一旦服务器运行,就可以通过以 get 形式访问 “http://{主机地址}:8000/hello” 访问该路由,服务器端将返回字符串结果 “hello world!”,最后通过调用 app.listen() 方法监听 8000 端口,开始提供服务。

下面先执行 tsc 命令,编译 src 目录下的全部文件,然后通过 node 命令启动输出后的 JavaScript 文件。

$ tsc
$ node dist/index.js

输出结果如下,此时服务已经开启,可以访问了。

> Express is listening at http://localhost:8000

此时,打开浏览器,访问之前编写的 API,地址为 http://localhost:8000/hello ,将会返回 “hello world!” 关键字,API 访问结果如图22-2所示。

image 2024 02 20 12 56 46 810
Figure 1. 图22-2 API访问结果

到这里,一个基本的后端服务已经搭建成功,但是启动时需要分别执行两条命令并不方便。此时创建 package.json 文件(在 D:\TSProject\server-side 目录下执行 npm init 命令),将 main 属性设置为 dist/index.js,并在 scripts 属性下新增 start 属性,将它的值设置为 tsc && node dist/index.js,代码如下。

{
  "name": "server-side",
  "version": "1.0.0",
  "description": "",
  "main": "dist/index.js",
  "dependencies": {
    "express": "^4.18.1"
  },
  "devDependencies": {},
  "scripts": {
    "start": "tsc && node dist/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

在项目根目录下,执行 npm start 命令,直接编译并启动服务,输出结果如下。

D:\TSProject\server-side> npm start

> server-side@1.0.0 start D:\TSProject\server-side
> tsc && node dist/index.js

> Express is listening at http://localhost:8000

配置完成后,项目结构如下。

D:\TSProject\server-side
│  package.json
│  tsconfig.json
│
├─node_modules
│      ...
│
├─dist
│      index.js
│
└─src
        index.ts