本文是本系列最后一篇,使用Node Express和TypeScript构建一个相对简单的API。
使用Node执行TypeScript代码
新建文件夹 reminders-api,并用vscode打开。再新建index.ts,写一些TypeScript代码,并使用node执行它。
提示出错了。
因为Node使用了JavaScript引擎,它并不识别TypeScript。我们有两个选择。
第一种选择,先编译成JavaScript(tsc index.ts),然后执行(node index.js)。之前我们都是这么做的。
第二种选择,使用 ts-node。我们就用这种方法。
运行:npm init -y
初始化生成了 package.json文件。
再安装 ts-node。并带上 -D 参数表示只在开发环境中安装该库。
npm i -D ts-node
删除package.json中scripts中的”test”,并添加。
“start”: “ts-node index.ts”
ts-node相当于合并了前面的两个步骤(编译和执行),这样我们就可以在Node中直接执行TypeScript代码了。
npm start
另外也可以加上 -g 参数表示全局安装,这样可以在所有项目中使用。
sudo npm i -g ts-node
建立一个Express项目
首先准确安装以下软件包:
npm i express
npm i -D typescript @types/node @types/express
我们已安装了typescript(全局方式),为什么要再安装一遍typescript?原因是项目可能会移到其他环境,而其他环境未必已全局安装了typescript,所以这里明确在项目里安装。
接着初始化生成tsconfig.json。
tsc –init
我们暂保持tsconfig.json不变,在项目有需要时才更改配置。
简单在index.ts中键入一些express的代码。
当然可以使用ts-node来运行,但每当我们的代码有修改时,需要手动重启服务才生效,有点麻烦。
我们选择用nodemon,它监视我们的文件,当文件有变化时自动重启服务,这样我们就能即时看到修改的结果。最新版本的nodemon支持ts-node,它会告诉TypeScript编译器将代码编译成JavaScript并运行。
npm i -D nodemon
接着,我们修改package.json的scripts:
“start”: “nodemon index.ts”
运行express。
npm start
然后对代码进行小修改,我们能即时看到修改的变化,说明nodemon已帮我们进行了服务的重启。
创建基本路径
在index.ts的listen语句前,添加一条基本路径。查看效果。
创建路由
新建routers文件夹,再新建reminders.ts文件,创建 /reminders路径并导出。
然后再在index.ts中使用该路径。
解释请求
要用post方法来创建reminder,首先得获取请求体。
新建dots文件夹,再新建create-reminder.ts文件,定义请求体的结构CreateReminderDto,作为示例 ,只有简单的一个title字段。
在reminders.ts中,添加一个post方法,获取请求体req.body,默认情况下req.body的类型是any,我们手动指定为CreateReminderDto,然后将title的内容通过json格式返回给客户端。
express默认不解释请求体的json结构,需要安装一个json中间件,新版本的express已包含该中间件,我们在index.ts里添加这个json解释器。
app.use(express.json())
然后,我们在postman中进行测试,传递{“title”:”My title”},并确认能正确返回结果。
构建API
在真实的项目中,API处理数据一般是存入数据库,且id自动生成。这个例子我们尽量保持简单,将数据存于数组中。
新建models文件夹,并新建reminder.ts文件,创建类Reminder,用于表示reminder的结构。
在post方法中,我们生成Reminder对象,用当前时间戳来模拟 id,然后将其存于数组中。
get方法,则直接获取数组。
在postman测试。
我们实现了API端点的get和post方法,delete, put方法也很类似,这里就不再详述了。
小结
本文利用Node Express和TypeScript构建了一个简单的API,演示了TypeScript在Node中的应用。
《TypeScript教程》至此已全部结束,感谢您的阅读,希望对您有所帮助。
我们下一个系列再见。