segmentfault官方|为 Express 开外挂
北京联盟_本文原题:为 Express 开外挂
作者:pingan8787
来源:SegmentFault 思否社区
本项目源码地址:
https://github.com/pingan8787/Leo-Java/blob/master/Cute-Gist/LearnSource/OvernightDemo/
随着 Nodejs 在前端涉及领域越来越广 , 也越来越成熟 , 相信很多朋友已经尝试或使用过 Nodejs 开发服务端项目了 。
本文我将和大家一起回顾 Express , 然后介绍一个超级外挂——OvernightJS , 它强大的地方在于 , 它将为 Express 路由提供 Type 装饰器支持 , 使得我们开发路由更加简单 , 代码复用性更好 。这里也希望帮助大家对 Type 的装饰器有更深了解 。
一、背景介绍
最近 Leo 打算使用 Express 来开始重构自己博客的服务端项目 , 经过认真研究和设计 , 并确定完方案 , Leo 开始下手啦:
// app.ts
import express, { Application, Request, Response } from 'express';
const app: Application = express;
app.get( '/', (req: Request, res: Response) => {
res.send( 'Hello World!');
});
app.listen(3000, => {
console.log( 'Example app listening on port 3000!');
});
其中 tsconfig.json 配置如下:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"experimentalDecorators": true, // 开启装饰器
"emitDecoratorMetadata": true, // 开启元编程
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}
基本代码写完 , 测试能不能跑起来 。
Leo 在命令行使用 ts-node 命令行执行 。 (ts-node 用来直接运行 ts 文件 , 详细介绍请查看文档 , 这里不细讲咯):
$ ts-node app.ts
看到命令行输出:
Example app listening on port 3000!
服务跑起来了 , 心情愉快 。
接下来 Leo 使用 Express 的路由方法写了其他接口:
// app.ts
app.get( '/article', (req: Request, res: Response) => {res.send( 'Hello get!')});
app.post( '/article', (req: Request, res: Response) => {res.send( 'Hello post!')});
app.put( '/article', (req: Request, res: Response) => {res.send( 'Hello put!')});
app.delete( '/article', (req: Request, res: Response) => {res.send( 'Hello delete!')});
app.get( '/article/list', (req: Request, res: Response) => {res.send( 'Hello article/list!')});
// ... 等等其他接口
Express 路由方法派生自 HTTP 方法之一 , 附加到 express 类的实例 。 支持对应于 HTTP 方法的以下路由方法:get、post、put、head、delete、options等等 。
同事 Robin 看了看代码 , 问到:
本文插图
随着接口越写越多 , 代码不免出现复杂和冗余的情况 , 为了解决这个问题 , Leo 引入 Express 的 Router, 来 创建可安装的模块化路由处理程序 。 Router 实例是完整的中间件和路由系统 。 因此 , 常常将其称为“微型应用程序” 。
Leo 新建文件 app.router.ts, 重新实现上面接口:
// app.router.ts
import express, { Router, Request, Response } from 'express';
const router: Router = express.Router;
router.get( '/', (req: Request, res: Response) => {res.send( 'Hello get!')});
推荐阅读
- 蝌蚪五线谱官方|云游杂记·琥珀屋丨杨枫【科幻微小说】
- 旅游那点事|史上最弯!一加8T官方宣布美背照:沾水会变色
- 症状|中国发布丨官方提醒公众旅行归来自我观察14天 有症状及时告知旅行史
- 深圳特区报官方微博|刚刚,诺贝尔文学奖揭晓!是她!
- 湖南经视官方账号|国庆长假期间湖南机场日均客流超过10万人次
- 官方|唐朝时的官方外交名是“大唐”,那清朝的是啥?说出来你可能不信
- 杂志之旅官方|“丧文化”大行其道,当代年轻人为何越来越厌世?
- 实用心理学官方号|心理学:不完美,也配好好活。时间不语,却回答了所有问题
- 趣头条|凯迪拉克发布官方草图,未来凯迪拉克SUV外观设计出炉
- 飞度|东本也要卖“飞度”了,本田LIFE胜算有多大?