Deno短网址服务实践

864 阅读4分钟

前言

开局先说这不是一篇教你怎么开发一套短网址服务的教程,这是我体验deno真实开发后的感受。之前有篇blog,谈了自己的对于node的实践经验,以及自己理解的deno和node之间的区别和deno带来的优点。真理源于实践,两者同是JS的runtime,出于同一作者,在上篇blog中,也有博主提及了deno的优点也就是说说,出于验证心理,我使用deno实现了一下很实用的短网址服务,通过开发这个服务深度体验了deno的优缺点,下面我来大概谈谈自己的实现过程和开发感受。

先说感受:

1.内置TS,确实方便不少,不用再babel,不用再有dist🤓,当然只是省掉了人工成本
2.ESM我并没有感觉多么的改善node_module,import确实让我感觉回到了module之前的不断地script+async引入js文件的感觉。同时,也需要一个好的包管理器(社区有我没用)
3.初次运行需要缓存所有的import,遇到墙很麻烦
4.安全沙箱,确实安全,需要各种allow,就开发效率运行安全综合感觉不要os层面的安全,在包管理处做好安全感觉是最好的选择
5.实践只做了正向的服务开发,相关的集成开发,运维,log等模块还有待社区壮大
6.直接支持promise,async/wawit写着确实爽
7.花了2天采坑实现shorturl,以上是目前的感受

短链接服务(shorturl)

你一定经历过因为某个软件发布动态有字长限制,而你想要分享的链接又超长。 你一定收到过各种isp短信,例如:移动啥的,给你发的短信中包含一段网址,点击跳转浏览器后变成了一段特别长的网址 等等 以上都是短网址服务的实际应用场景

基于以上的思考,利用deno开发一个短网址服务idea就产生了,做了2天,因为踩了deno的各种坑,用node可能就2小时。最终的服务如下: 点击访问官网

简单的理解不难想象出,短链接的直观功能是:
1.输入一段长url,并提交
2.服务器收到长url后,通过相关的定长算法(hash等)生成唯一定长的短url
3.存入数据库进行持久化
4.访问短链接,服务通过短链接查询到原链接,并通过301或302进行重定向

开发过程

1.环境安装 我是在Mac上开发的,服务器是windows server,Mac上利用 curl安装即可

curl -fsSL https://x.deno.js.cn/install.sh | sh

Windows上利用powershell,安装很方便,不知道是因为是云服务器的原因还是怎么的,mac遇见的墙windows并没有遇见,下载安装也十分的快

iwr https://x.deno.js.cn/install.ps1 -useb | iex

2.mvc构建 网上好多都是一个ts文件搞定,但为了项目的后期维护与开发,我还是上了mvc,现在的文件结构是这样的,开发过程中我一度觉得我在写egg😄,真的是超像!有时候就觉得哪些外国大佬是吃饱了没事干,需要开源个东西圈开源基金。 pic

3.数据库连接

数据库连接用了自带的client创建连接池,本想找个orm的,找了半天也没找到,就自己封装model进行query了。

总结

一个c++的底层runtime,一个rust的底层runtime,node和deno的比较不仅是两者开发实践效率,性能,社区完备性(这个可能暂时也没法比,但我看deno的star已经和node相差无几了,社区也会不断火起来的)的对比,更是底层语言的比拼。 至于deno和node最终谁会成为hoster,我觉得大可不必,作为程序员,技术是自己的,不用过多的参与社区非A即B的讨论,这世界本就是多元的,我们是做不到最好的,只能做到最优,提升自己,在面对问题时,能够给出最优的解决方案才是我们应该做的。