# 优化node-ts脚手架-1
# 1. 将接口抽离,并定义传值
面向接口编程
# 1.1. 新建一个api文件夹
- apiGetPosts.ts
- 在里面引入express的钩子RequestHandler
import { DataStore } from '../data/data';
import { RequestHandler } from 'express'
// posts接口
export const apiGetPosts: RequestHandler = (req, res)=> {
res.json(DataStore.posts);
}
// postsDetail接口
export const apiGetPostsDetail: RequestHandler = (req, res) => {
// 接收从页面传过来的值
// console.log(req.params);
DataStore.posts.forEach((item: any)=> {
// console.log(item);
if(item.id == req.params.id) {
res.json(item);
}
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1.2. server.ts改写
import express from 'express';
import {
apiGetPosts, // posts接口
apiGetPostsDetail, // postsDetail接口
} from './api/apiGetPosts'
const app = express(); // 实例化
// 打包上线时可以识别端口号
// 启动一个端口
app.listen(process.env.PORT || 8091, ()=> {
console.log('Server started...');
});
// 实现posts接口
app.get("/posts", apiGetPosts); // posts接口
app.get("/posts/:id", apiGetPostsDetail); // postsDetail接口
// 监听路由
// 根路径
app.get("/", (req, res, next)=> {
res.send('node ts api is working...');
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 3. 使用ts语法,定义变量类型
# 3.1. 新建实体类
- 新建文件夹 model/shared/postSummary.ts
// 实体类定义
export class PostSummary {
"userId": number;
"id": number;
"title": string;
"body": string;
constructor(data: any) {
this.userId = data.userId;
this.id = data.id;
this.title = data.title;
this.body = data.body;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 3.2 改写接口文件
- apiGetPosts.ts
import { DataStore } from '../data/data';
import { RequestHandler } from 'express'
import { PostSummary } from '../model/shared/postSummary'
// posts接口
export const apiGetPosts: RequestHandler = (req, res)=> {
res.json(DataStore.posts.map((item: any)=> new PostSummary(item)));
}
// postsDetail接口
export const apiGetPostsDetail: RequestHandler = (req, res) => {
// 接收从页面传过来的值
// console.log(req.params);
DataStore.posts.forEach((item: any)=> {
// console.log(item);
if(item.id == req.params.id) {
// res.json(item);
// 先对PostSummary实例化,把item传递过去,就都定义了ts的数据类型了
res.json(new PostSummary(item));
}
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23