为什么不学?学不动了吗?!别躺下啊,我扶你起来!

我们早就知道,如今的JavaScript已经不再是当初那个在浏览器网页中写写简单的表单验证、没事弹个alert框吓吓人的龙套角色了。借助基于v8引擎的Node.js Runtime以及其他一些JavaScript Runtime的平台能力,JavaScript已经成长为在桌面端、移动端、服务端、嵌入端全面开花的妖艳明星。

使用JavaScript做服务端开发,是我一直非常喜欢的一件事情。记得第一次使用JavaScript开发服务端程序,还是在我读大学的时候,那时学习编写古老的ASP页面程序,默认是用VBScript编写的,可是我不太喜欢VBScript的语法,我就去看微软的MSDN文档,发现居然也可以用JScript(微软开发的一种ECMAScript规范的实现)来编写ASP,非常兴奋,果断连夜把之前所有的VBScript代码用JScript替换了一遍。

到后来参加工作,JavaScript也渐渐进入Ajax流行、封装工具库横行的时代。我们使用着各种JS工具库(Prototype,jQuery,Mootools,YUI,Dojo等等等等),前端的开发工作开始慢慢出现了独立化、专业化的趋势,一些软件工程师们(不分前后端,写代码的都叫软件工程师)以及美工师傅们(对,美工!那时候的美工其实很能干的,既做平面设计,也做HTML、JS、CSS的编写)也开始有点跟不上前端的发展速度了,开始各自做各自擅长范围内的事情了,即所谓的纵向发展。而我也是Java和JavaScript都在做,但是用JavaScript来统一做前后端的想法一直存在,并一直关注着这块的动向。没过多久,还真的出现了一个!这就是开发了当时非常流行的前端开发工具Aptana Studio的公司所开发的服务端框架Apatana Jaxer。用这个框架写出来的代码跟当初的ASP还有点像呢:

<script runat="server">  var rs = Jaxer.DB.execute('SELECT * FROM products');  var price = rs.rows[0].price;script>

我还用Jaxer写了一些小项目呢,用起来还是非常不错的。只可惜,Jaxer在开发圈子里还是没有真正火起来。

后来,Node.js出现了。由于它基于v8所带来的性能,模块化系统,比较丰富的原生API以及原生扩展能力,以及npm包管理,让整个围绕它形成的生态体系真正的火了起来。而Node.js凭借它异步IO的优异性能、快速开发部署能力、前后端技术栈统一、以及最近流行的SSR风潮,使得它在服务端开发领域真正的占有了一席之地。并且,Node.js的异步思想也带动了其他各种语言下服务端框架的进步与创新,比如Java的Vert.x,WebFlux,Scala的AKA等等。

随着JavaScript在各种前后端项目中的使用量越来越大,开发团队间需要的协作越来越多,JavaScript本来的动态性、灵活性由一个人见人爱的小可爱,变成了一只吃人的大老虎,不仅四处撕咬着缺乏足够经验的开发者,偶尔也会给高级开发者挖个坑埋个雷。这种时候,做过静态语言开发的开发者们会想念起曾经用过的那些C/C++、Java、C#,虽然静态类型检查在开发过程中带来了一些的额外工作量,但也真实的带来了开发质量的提高,以及更好的开发工具支持。

新事物总是在遇到问题和矛盾当中产生,一些拥有类型检查特性的工具或可转译语言诞生了,比如Flow、Dart、还有TypeScript。尤其是TypeScript,凭借着其高富帅背景(MicroSoft)以及自身的优质特性,经过多年的发展,社区越来越大,应用越来越广,着实是受人欢迎,它已经成为了JavaScript生态圈后续发展的一种明显趋势。各种前端框架和Node.js后端框架,都竞相加入对TypeScript的支持,看着不用TypeScript都对不住他们的热情啊!

说来,我第一次使用TypeScript做实际的项目,还是3、4年前的时候。因为那个时候一直在用Angular 1.x作为主要的前端框架,后面Angular发布了全新的Angular 2版本,所以我们团队就顺其自然的开始研究并实践Angular 2。我们都知道,Angular 2完全使用TypeScript来编写,整体编程理念设计上来说也非常的OOP,且内置了RxJS作为响应式编程的基础,以及引入了Java界非常引以为傲的依赖注入机制(IoC),在当时的前端界产生了很大的争议。但是从现在来看,它还是非常有前瞻性的和先进性的。

该来的它还是会来,不该来的它来了也会走。

Angular 2+的设计理念继而对Node.js服务端框架的设计也产生了很大的影响,NestJS算是把Angular的衣钵都成套抢过去的一位了。

NestJS这个框架算是到目前为止,对TypeScript支持的最好的一个Node.js服务端框架了,它的上层框架实现了一套通用的框架机制如:模块、自定义装饰器、依赖注入、控制器、过滤器、管道、守卫、中间件和拦截器等功能;在框架下层,通过适配器适配到其他一些符合其理念的基础HTTP框架如Express、Fastify等。NestJS的这套设计理念使其不光可以作为Web框架使用,也可以用于非Web类程序的开发。

先瞄一瞄用NestJS写的一段代码吧:

import { Controller, Get } from '@nestjs/common';@Controller('products')export class ProductsController {  @Get()  findAll(): string[] {    return ['iPhone', 'iMac', 'iPod'];  }  }

上面这段代码就是一个简单的控制器代码,它通过使用2个装饰器 @Controller() 和装饰 @Get() ,将一个普通的class类,变成了一个可以提供Rest API的后端控制器服务。假如这段代码运行起来,它可以被通过这样的URL进行访问:http://use-your-domain/products

是不是挺有意思?今天我就这么简单的扯一通,我准备在后面的文章或视频教程中,一点一点和大家深入探讨TypeScript和NestJS的各种功能特性。不光如此,由于要学习和掌握服务端开发的话,需要涉及的内容还是非常多的,所以我准备再加入一些后端开发过程中会经常用到的东西,比如MySQL、Redis、MongoDB、RabbitMQ;如何在前后端的应用开发中使用GraphQL;以及如何使用Docker进行服务部署等相关的内容。

希望你搬好小凳子,坐等我更新吧!

rds基于什么开发_为什么不学基于TypeScript的Node.js服务端开发?相关推荐

  1. 56 Node.js服务端开发入门

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.服务器端基本概念 1.1 网站的组成 网站应用程序主要分为两大部分:客户端和服务器端. ...

  2. Node.js服务端开发总结(一)

    一.Node简介 为什么要学习Node 前端必备技能.可以更好的学习前端框架.能够进一步了解Web,有助于了解后端开发. Node是什么 Node.js是基于Chrome的V8 JavaScript引 ...

  3. node.js服务端笔记文档学会写接口,学习分类:path、包、模块化、fs、express、中间件、jwt、开发模式、cors。

    node.js 学习笔记 node.js服务端笔记文档学会写接口,path.包.模块化.fs.express.中间件.JWT.开发模式.cors. gitee:代码接口笔记 1什么是node.js n ...

  4. 开发函数计算的正确姿势 —— 移植 next.js 服务端渲染框架

    为什么80%的码农都做不了架构师?>>>    首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算 ...

  5. python服务器端开发面试_【网易游戏Python面试】python 服务端开发-看准网

    10.21终面已参加,希望能顺利通过终面拿到offer-❤一共三轮,电话面试+笔试+视频面试,视频面试3V110月19日投的新媒体运营的简历,HR说因为是周末,等工作日再联系我,在周一下午三点我接到了 ...

  6. 品达物流TMS项目_第11章 TMS司机端、快递员端开发

    品达物流TMS项目_第11章 TMS司机端.快递员端开发 文章目录 品达物流TMS项目_第11章 TMS司机端.快递员端开发 第11章 TMS司机端.快递员端开发 1. 导入功能代码 2. 分布式事务 ...

  7. 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计

    转载需经本人同意且标注本文原始地址:https://zhaomenghuan.github.io/blog/nodejs-eggjs-usersytem.html 前言 近来公司需要构建一套 EMM( ...

  8. 伪装成mysql的备_如何伪装成一个服务端开发(六) -- 数据库操作

    目录 如何伪装成一个服务端开发(六) 前言 本篇开始学习Spring 的数据库连接. 术语 数据库连接涉及到一些术语,如果在学习之前没有搞清楚,很容易在业务理解上出现偏差. JDBC : Java D ...

  9. 基于spring-boot+uni-app实现app支付功能(微信/支付宝)服务端

    基于spring-boot+uni-app实现app支付功能(微信/支付宝)服务端 支付宝支付 1 准备工作 申请支付能力 接口加签方式 2代码 依赖 支付宝支付配置类 支付宝控制层 异步通知 微信支 ...

最新文章

  1. js脚本 处理js注入
  2. POJ 2187 Beauty Contest( 凸包求最远点对 )
  3. Java经典面试题(N人循环报M个数出列)实现
  4. java过程调用语句_Java之流程控制语句
  5. mysql提高并行并行_oracle 并行之并行度篇
  6. mysql 多主一从备份_(5.14)mysql高可用系列——级联复制与多主一从(多源复制)...
  7. 《复杂》读书笔记(part1)--一些思想是由简单的思想组合而成,我称此为复杂
  8. 控制台:Unable to import maven project: See logs for details日志:Unable to create injector, see the follow
  9. 用python祝福父亲节_父亲节到来 最适合给年老的父亲祝福语
  10. 【华为云技术分享】MongoDB经典故障系列五:sharding集群执行sh.stopBalancer()命令被卡住怎么办?
  11. java原生的ajax怎么写,用原生js实现 ajax方法
  12. 建立个人Maven仓库
  13. 微信小程序获取二维码报错:{“errcode“:47001,“errmsg“:“data format error hint:“}
  14. 死锁——哲学家就餐问题
  15. oracle remapschema,remap schema多个用户
  16. 让两个Div并排显示的多种方法
  17. java apex_Apex基础知识(一)
  18. STM32 OV7725 传感器
  19. PWA (Progressive Web App)
  20. 洛谷 - P4997 - 不围棋 - 并查集 - 模拟

热门文章

  1. 基于移位寄存器的序列密码
  2. Boost Part III. 函数对象与高级编程 Library 10. Lambda 用法
  3. (17)10-10-12分页
  4. C#获取一些常用目录
  5. Windows句柄表学习笔记 —— 句柄表全局句柄表
  6. 【Cockpit】 如何组织管理多台服务器?
  7. Windows10熄屏自动断开WiFi连接解决方法
  8. 145. 超市【小根堆 贪心】
  9. 2021算法竞赛入门班第一节课【枚举、贪心】习题
  10. 对于刷oj时因为scanf()出现wa而cin却AC的详解 【scanf() 和 cin 详解】