用 serverless 與 typescript 開發第一個 Koa 應用

對於稍微大型的 Node 應用,typescript 已是標配,它爲 javascript 提供了強類型的鎧甲,有效提升了代碼質量。javascript

這裏是一個結合 tskoa 快速部署到騰訊雲函數計算中的模板。倉庫以下html


  1. 若是你只想搭建一個博客
  2. 使用 Netlify 託管靜態網站與持續集成
  3. 使用 AliOSS 部署及加速你的靜態網站
  4. Github Actions 持續集成簡介及實踐
  5. 使用 Serverless Framework 開發第一個雲函數
  6. 使用 serverless Component 開發第一個 Koa 應用

快速使用

使用本模板快速建立應用java

$ serverless install --url https://github.com/shfshanyue/serverless-template-zh/tree/master/tencent-koa-ts --name koa-server
複製代碼

在項目建立早期儘量對 package 進行升級,這裏使用了 npm-check-updatesnode

$ npm run ncu
複製代碼

在測試環境中進行開發ios

$ 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 等。git

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-koagithub

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 資源。typescript

# 裝包
$ 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,仍是很快速npm

Http 調用

在本地直接使用 npm run dev,在本地端口調試。而在生產環境,使用 sls 部署後日志中提供的 url 進行 http 調用json

$ curl https://service-dture22u-1257314149.gz.apigw.tencentcs.com/release/
hello, path: '/'# 
複製代碼

缺點

在開始以前,稍微提一下缺點:

  1. 部署麻煩,須要先編譯 ts 至 js,而且僅上傳生產環境須要的 node_modules (所有上傳速度過慢)
  2. 在本地不支持 logmetrics,須要轉至騰訊雲控制檯查看

因爲部署過程稍微複雜,能夠考慮重寫一個關於 ts 的 serverless component

相關文章
相關標籤/搜索