介绍
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上查看完整的博客。