Wilbur入门

如果您花了很多时间来开发全栈式Web应用程序,那么您就会知道从头开始创建新应用程序是很繁琐的 。 您可以在GitHub上找到许多样板示例来帮助完成该过程,但是我发现自己仍然在开始新项目时花费大量时间来乏味地编写样板代码。

威尔伯来了。

Wilbur是我从头开始开发的跨平台桌面应用程序,目的是在几秒钟内启动您的NodeJS应用程序开发。 它将为您生成一个具有以下功能的应用程序,例如,具有TypeGoose对MongoDB的开箱即用的支持,具有强类型/可序列化的TypeScript类以及使用class-validator的强验证功能。 所有这些都是用TypeScript 3+编写的。

wilbur与其他项目样板/发电机有何不同?

威尔伯不仅仅是发电机。 尽管wilbur可以创建样板NodeJS应用程序, 但它可以基于您为其定义的可定制配置来创建定制代码 。 使用wilbur生成代码库后,您可以不断地从应用程序中添加和删除功能,而无需编写任何代码。

这样,在使用wilbur时无需使用终端。 Wilbur有能力在跨平台(Windows / Mac / Linux)桌面应用程序中完全使用。

Wilbur不仅是样板应用程序生成器。 使用wilbur时,您可以描述TypeScript类及其属性。 作为交换,您将获得一个模型类,该模型类已经进行了字段验证和MongoDB连接。 Wilbur还将为您的类生成GET / POST / PUT / DELETE HTTP终结点,该终结点使用烘焙的验证来确保您的数据干净。 垃圾! Wilbur还将为您的课程生成交互式的swagger文档。

已经使用wilbur生成了您的应用程序? 使用wilbur生成应用后,您可以向应用中连续添加或删除类(带有http端点,swagger文档等)。 您也可以使用wilbur从您的应用程序中删除类(及其关联的端点,swagger文档等),而无需亲自进入并接触代码库。

威尔伯(Wilbur)编写适用于2019的生产就绪型Node应用程序。威尔伯( wilbur)生成的每一行代码完全用TypeScript 3+编写。 它具有许多功能,包括热重载,内置的摩卡测试功能/报告/覆盖率报告等。

这是您使用wilbur开箱即用的一些功能:

  • 完全用TypeScript 3.x编写的NodeJS + ExpressJS API服务器仅需几秒钟即可生成
  • 内置的MongoDB功能(使用TypeGoose从打字稿类创建Mongoose模型)
  • 使用express-validator和class-validator进行强大的请求验证
  • 使用Pino记录器进行漂亮的记录
  • 使用json2typescript通过安全类型检查将JSON集成到TypeScript序列化/反序列化
  • 使用dotenv将.env文件中的环境变量转换为process.env 。 将配置与代码分开存储在环境中是基于“十二要素应用程序”方法的。
  • 交互式Swagger文档
  • 带背包的生产大楼
  • 内置Mocha测试框架
  • Mochawesome精美的自动化HTML测试报告
  • 伊斯坦布尔广泛的代码覆盖率报告
  • 生成后能够从您的应用程序中连续添加,更新和删除类​​的能力

在安装wilbur之前,这是您需要做的(如果您在可能已经安装了这些应用程序之前已经编写了一个节点应用程序):

  • 已安装NodeJS和NPM(也适用于Yarn)
  • 约曼
  • MongoDB

首先,让我们安装 wilbur yeoman生成器

  $ npm i yeoman generator-wilbur -g 

接下来,下载并运行wilbur桌面

  • 视窗
  • 苹果电脑

而已。 您已经准备好开始生成NodeJS Typescript应用程序。

(请注意:(如果在Mac上,您收到一条错误消息“ wilbur无法打开,因为它来自身份不明的开发人员”) ,请导航至“系统偏好设置”->“安全性和隐私”,您应该会看到一条消息,指出“ wilbur阻止打开,因为它不是来自确定的开发人员 ”单击该按钮旁边的按钮,然后单击标记为“ 始终打开”的按钮)

当您打开wilbur生成器时,这是您第一次看到。

对于我们的应用程序,我们将生成带有几个TypeScript类的应用程序。 例如,假设我们要创建一个具有两个对象的API: 一个学生对象和一个教授对象 。 学生应具有唯一的8个字符的学生证号码,名字和姓氏。 教授应具有唯一的8个字符的教授ID号,名字,姓氏以及所教课程的数量。

让我们使用wilbur制作这些类。

首先,让我们定义学生班级。

让我们检查一下在http:// localhost:9000为我们生成的文档

该应用程序不仅会生成这些文档,而且还允许您直接从浏览器向生成的API发出HTTP GET,PUT,POST和DELETE请求。

让我们尝试使用生成的post端点在数据库中创建教授。 该请求将如下所示

  POST http:// localhost:9000 / api / v1 /教授 
{
“ professorID”:“ ABC42”,
“ firstName”:“ Alex”,
“姓” : ””,
“课程教学”:-1
}

这里有一些问题。 首先,教授ID并非完全像我们之前所说的8个字符一样。 另外,尽管lastName字段是必填字段,但仍完全空白。 最后,课程Taught字段为-1; 在定义教授课程时,我们包括了一个验证修饰符,以确保其值为正。在没有任何请求验证的情况下,该垃圾数据将被插入数据库中。 让我们看看使用wilbur生成的应用程序尝试此请求时会发生什么。

  HTTP状态码:400错误请求 
{
“ message”:“错误请求”,
“状态”:400,
“错误”:[
{
“目标”:{
“ professorID”:“ ABC42”,
“ firstName”:“ Alex”,
“ lastName”:null,
“课程教学”:-1
},
“ value”:“ ABC42”,
“ property”:“ professorID”,
“儿童”:[],
“约束”:{
“ minLength”:“教授ID必须大于或等于8个字符”
}
},
{
“目标”:{
“ professorID”:“ ABC42”,
“ firstName”:“ Alex”,
“ lastName”:null,
“课程教学”:-1
},
“值”:null,
“ property”:“ lastName”,
“儿童”:[],
“约束”:{
“ isNotEmpty”:“姓氏不能为空”,
“ isString”:“姓氏必须是字符串”
}
},
{
“目标”:{
“ professorID”:“ ABC42”,
“ firstName”:“ Alex”,
“ lastName”:null,
“课程教学”:-1
},
“值”:-1,
“ property”:“ coursesTaught”,
“儿童”:[],
“约束”:{
“ isPositive”:“所教课程必须为正数”
}
}
]
}

我们看到该API拒绝了请求,并出现以下错误:

  ProfessorID必须大于或等于8个字符 
lastName不能为空
lastName必须是字符串
授课数量必须为正数

如前所述,wilbur确保将in ==垃圾输出 。 让我们尝试从POST请求创建一个具有符合我们为有效教授定义的条件的JSON正文的教授。

  POST http:// localhost:9000 / api / v1 /教授 
{
“ professorID”:“ ABC42564”,
“ firstName”:“ Alex”,
“ lastName”:“ batis”,
“教的课程”:42
}

我们的回应:

  HTTP状态代码:201已创建 
{
“ _id”:“ 5bd8b6178037987c0a4fecb9”,
“ professorID”:“ ABC42564”,
“ firstName”:“ Alex”,
“ lastName”:“ batis”,
“课程教学”:42
“ createdAt”:“ 2018-10-30T19:50:47.548Z”,
“ updatedAt”:“ 2018-10-30T19:50:47.548Z”,
“ __v”:0
}

该教授已通过其生成的HTTP发布请求在MongoDB中创建! 这正是我们希望发生的事情,但是我忘了把教授的姓大写的名字。 让我们通过使用HTTP PUT请求对其进行更新来解决此问题。

  HTTP PUT http:// localhost:9000 / api / v1 / professors / 5bd8b6178037987c0a4fecb9 
{
“ lastName”:“ Batis”
}

HTTP响应:

  HTTP状态码:200 OK 
{
“ _id”:“ 5bd8b6178037987c0a4fecb9”,
“ professorID”:“ ABC42564”,
“ firstName”:“ Alex”,
“ lastName”:“ Batis”,
“课程教学”:42
“ createdAt”:“ 2018-10-30T19:50:47.548Z”,
“ updatedAt”:“ 2018-10-30T19:52:42.915Z”,
“ __v”:0
}

好多了。

接下来,我们将通过生成的交互式swagger文档测试学生的HTTP GET,PUT,POST和DELETE API端点。

最后,让我们通过将其添加到我们的应用程序中来生成Course对象代码。 这将添加上面提到的所有控制器,验证器,类,服务,swagger文档等。

而已! 使用wilbur,我们已经生成,删除了功能,并向以TypeScript 编写的功能齐全且可自定义的NodeJS + ExpressJS + MongoDB API应用程序添加了功能, 而无需自己编写任何代码

快乐生成(-:

资源:

  • wilbur-app git回购
  • wilbur-generator git repo
  • 在此示例中由wilbur生成的university-app