一个带有快报的项目
#javascript #typescript #restapi #expressots

介绍

ExpressoTS是用于服务器端应用程序的新开发人员友好的打字稿框架。它目前是建立在Express之上的,易于使新的开发人员,轻便且简单的项目结构,两个不同的项目结构支持(有见识的和非自以为是的版本),支持MVC,非MVC,Architecture。自以为是的模板是建立在干净体系结构之上的,您会看到嵌入在有见识的模板中的概念,例如实体,用户库,存储库和提供商。

设置您的第一个快递项目

ah,迈向编码适当设置的世界上任何伟大旅程的第一步。相信我,甚至在开始冒险之前,没有人愿意迷路。因此,让我们切成碎片,然后深入潜水。

Expressots CLI的安装

您在这里有两条路线,目的地是相同的,即功能表达器环境。您的第一个选择是在全球安装Expressots CLI:

pnpm i -g @expressots/cli

有限的承诺问题吗?不用担心,您也可以使用dlx在不安装全球的情况下运行CLI。啊,一晚的奇观,带有CLI!

pnpx @expressots/cli new expressots-first-project

配置向导

运行命令后,您会受到友好(尽管基于文本的)向导ð§``

[🐎 Expressots]

? Project name expressots-first-project
? Package manager pnpm
? Select a template Non-Opinionated :: A simple ExpressoTS project.
? Do you want to create this project? Yes

明智地填写表格,但不要过度思考。对于本教程,我要使用“未开放”模板,因为它将在开始时为我们提供较浅的学习曲线。

在您的新Expressots Home中舒适

导航到您的项目

因此,您已经设置了新的Expressots项目。惊人的!是时候进入引擎室内的引擎盖。

cd expressots-first-project

您现在在根文件夹中,如果您对默认包装的内容感到好奇,请运行快速tree命令。

@expressots/tests/expressots-first-project via  v16.19.0
❯ tree -I node_modules -a
.
├── .eslintrc.js
├── expressots.config.ts
├── .gitignore
├── jest.config.ts
├── package.json
├── pnpm-lock.yaml
├── .prettierrc
├── README.md
├── src
│   ├── app.container.ts
│   ├── app.controller.ts
│   ├── app.module.ts
│   ├── app.usecase.ts
│   └── main.ts
├── test
│   └── app.usecase.spec.ts
├── tsconfig.build.json
└── tsconfig.json

3 directories, 16 files

你去!这些是您要居住的文件。

自定义您的漂亮偏好

您拥有自己的编码风格 - 我们不是所有人吗?您可以将.prettierrc文件调整为您内心的内容。

{
  "singleQuote": false,
  "trailingComma": "all",
  "endOfLine": "auto",
  "tabWidth": 2
}

让我们快速参观 package.json

浏览package.json中的scripts部分,告诉您您需要知道的所有内容才能使事情启动和运行。

cat package.json | jq ".scripts"
{
  "prebuild": "rm -rf ./dist",
  "build": "tsc -p tsconfig.build.json",
  "dev": "tsnd ./src/main.ts",
  "prod": "node ./dist/main.js",
  "test": "jest",
  "test:watch": "jest --watchAll",
  "test:cov": "jest --coverage",
  "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
  "lint": "eslint \"src/**/*.ts\" --fix"
}

在这里,您有通常的嫌疑人:构建,开发,测试等等。

格式化所有东西!

在进行开发之前,让我们保持整洁。 format脚本将处理。

pnpm format

在开发模式下运行

最后,当您等待启动开发服务器并看到您的应用程序栩栩如生的那一刻!

@expressots/tests/expressots-first-project via  v16.19.0
❯ pnpm dev

[INFO] ts-node-dev ver. 2.0.0 (using ts-node ver. 10.9.1, typescript ver. 4.9.5)
Application version not provided is running on port 3000 - Environment: development

提出您的第一个请求

是时候打个招呼了!

您已经经历了房屋之旅,您已经使用了.prettierrc的风水,并把脚本都弄清楚了。怎么办?好吧,如何实际看到您的应用程序?

使用httpie进行第一个获得请求

为此,我们将使用21世纪的cURL使用HTTPie。但是,更可读性。这是将您的第一个获得请求发送到http://localhost:3000的方法。

@expressots/tests/expressots-first-project via  v16.19.0
❯ http :3000

bam!您应该看到一个响应:

HTTP/1.1 200 OK
...
Hello Expresso TS!

恭喜!您刚刚让您的服务器打个招呼。

“ Hello Expresso TS”的解剖结构! ð■

好吧,让我们剖析"Hello Expresso TS!"消息。这个简单的字符串如何通过TypeScript文件层以将其传递给您的浏览器?剧透:这不是魔术;这只是结构良好的代码。

起点: src/main.ts

这是接力棒被捡起的地方。在这里,我们从Expressot中导入基本零件并设置初始应用程序实例。足够简单。

import "reflect-metadata";
import { AppInstance, ServerEnvironment } from "@expressots/core";
import { container } from "./app.container";

async function bootstrap() {
  AppInstance.create(container);
  AppInstance.listen(3000, ServerEnvironment.Development);
}

bootstrap();

容器: src/app.container.ts

将其视为后台,每个人都为演出做好了准备。这是使用自定义模块配置应用程序容器的地方。

import { AppContainer } from "@expressots/core";
import { AppModule } from "./app.module";

const appContainer = new AppContainer();
const container = appContainer.create([AppModule]);

export { container };

模块: src/app.module.ts

表达组中相关功能中的模块。在这里,它和导入AppController一样简单。

import { CreateModule } from "@expressots/core";
import { AppController } from "./app.controller";

const AppModule = CreateModule([AppController]);

export { AppModule };

控制器: src/app.controller.ts

这是我们乐团的指挥。它负责处理HTTP请求和指导流量。在这种情况下,这只是说,"Hello Expresso TS!"

import { BaseController, controller, httpGet, response } from "inversify-express-utils";
import { Response } from "express";
import { AppUseCase } from "./app.usecase";

@controller("/")
class AppController extends BaseController {
  constructor(private appUseCase: AppUseCase) {
    super("app-controller");
  }

  @httpGet("/")
  execute(@response() res: Response) {
    return res.send(this.appUseCase.execute());
  }
}

用例: src/app.usecase.ts

这是实际的"Hello Expresso TS!"所居住的地方。

import { provide } from "inversify-binding-decorators";

@provide(AppUseCase)
class AppUseCase {
  execute() {
    return "Hello Expresso TS!";
  }
}

“你好,谁?”更改默认响应ð

对通常的"Hello Expresso TS!"感到无聊?让我们给它一个个人的感觉。为此,我们只需要冒险进入src/app.usecase.ts文件即可。看,这是结构良好的代码库的美丽;您不必跳过篮球即可进行简单的更改。

调整: src/app.usecase.ts

一行更改。就是这样。在这里,我们只是将文本换成"Hello from <Daniel::Boll>"

@provide(AppUseCase)
class AppUseCase {
  execute() {
    return "Hello from <Daniel::Boll>";
  }
}

重新加载:自动refresh ftw

保存该更改后,开发服务器会检测到此更新并重新加载。无需手动努力。啊,现代发展的乐趣。

[INFO] Restarting: /../@expressots/tests/expressots-first-project/src/app.usecase.ts has been modified
Application version not provided is running on port 3000 - Environment: development

结果:让我们再次与服务器交谈

运行命令,瞧!现在,更新的问候被热门提供,直接从您的服务器上。

Hello from <Daniel::Boll>

深入潜水

如果您对更多的事情感兴趣,可以在此简单的表达机构项目中进行,请务必在daniel-boll.me上查看完整的博客。