ITPub博客

首页 > > > 用 serverless 与 typescript 开发第一个 Koa 应用

用 serverless 与 typescript 开发第一个 Koa 应用

作者:llittle 时间:2020-04-17 07:35:51 0 删除 编辑

对于稍微大型的 Node 应用,typescript 已经是标配,它为 javascript 提供了强类型的铠甲,有效提高了代码质量。

这里是一个结合 ts 及 koa 快速部署到腾讯云函数计算中的模板。仓库如下


  1. 如果你只想搭建一个博客
  2. 使用 Netlify 托管静态网站与持续集成
  3. 使用 AliOSS 部署及加速你的静态网站
  4. Github Actions 持续集成简介及实践
  5. 使用 Serverless Framework 开发第一个云函数
  6. 使用 serverless Component 开发第一个 Koa 应用

快速使用

使用本模板快速创建应用

$ serverless install --url https://github.com/shfshanyue/serverless-template-zh/tree/master/tencent-koa-ts --name koa-server
复制代码

在项目创建早期尽可能对 package 进行升级,这里使用了 npm-check-updates

$ npm run ncu
复制代码

在测试环境中进行开发

$ npm run dev
复制代码

文件结构

.
├── dist/               # 编译文件,及最终需要上传的目录
├── node_modules/
├── app.ts              # 入口文件,必须采用 app 的命名
├── package.json
├── package-lock.json
├── Readme.md
├── serverless.yaml     # serverless 配置文件
└── tsconfig.json
复制代码

app.ts

app.ts 即是你业务逻辑的入口文件,你可以像其他 Koa Application 一样自由组织路由,业务逻辑,Model 等。

import Koa from 'koa'

const app = new Koa()

app.use(async (ctx, next) => {
  ctx.body = `hello, path: '${ctx.request.path}'`
})

app.listen(3333, () => { console.log('Listening 3333') })

module.exports = app
复制代码

serverless component

serverless component 可以认为是把 faas 及 baas 资源集合的进一步抽象,该项目采用了 @serverless/tencent-koa

koa-app:
  component: '@serverless/tencent-koa'
  inputs:
    region: ap-guangzhou
    functionName: koa-function
    runtime: Nodejs10.15
    code: ./dist
    functionConf:
      timeout: 60
      memorySize: 128
    apigatewayConf:
      protocols:
        - https
      environment: release
复制代码

部署

部署之前需要准备好生产环境所需的 node_modules 以及编译完成的 js 资源。

# 装包
$ npm install typescript

# 编译成 js
$ npm run build

# 打包生产环境的包,并移至 dist 目录
# predeploy: npm ci --production && rsync -avz node_modules dist/
$ npm run predeploy

# 部署到腾讯云
$ sls
koa-function [████████████████████████████████████████] 100% | ETA: 0s | Speed: 314.98k/

  koa-app:
    functionName:        koa-function
    functionOutputs:
      ap-guangzhou:
        Name:        koa-function
        Runtime:     Nodejs10.15
        Handler:     serverless-handler.handler
        MemorySize:  128
        Timeout:     60
        Region:      ap-guangzhou
        Namespace:   default
        Description: This is a function created by serverless component
    region:              ap-guangzhou
    apiGatewayServiceId: service-dture22u
    url:                 https://service-dture22u-1257314149.gz.apigw.tencentcs.com/release/
    cns:                 (empty array)

  11s › koa-app › done
复制代码

从日志可以看出,部署到腾讯云只需 11s,还是很快速

Http 调用

在本地直接使用 npm run dev,在本地端口调试。而在生产环境,使用 sls 部署后日志中提供的 url 进行 http 调用

$ curl https://service-dture22u-1257314149.gz.apigw.tencentcs.com/release/
hello, path: '/'# 
复制代码

缺点

在开始之前,稍微提一下缺点:

  1. 部署麻烦,需要先编译 ts 至 js,并且仅上传生产环境需要的 node_modules (全部上传速度过慢)
  2. 在本地不支持 log 及 metrics,需要转至腾讯云控制台查看

由于部署过程稍微复杂,可以考虑重写一个关于 ts 的 serverless component

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    448
  • 访问量
    4402