一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

在 Node.js 中使用 TypeScript

 F2967527 2023-11-20 發(fā)布于天津

本文以 Koa2 搭建一個(gè) HTTP 服務(wù)器為案例,去介紹如何在 Node.js 項(xiàng)目中使用 TypeScript,讀者能在 https://github.com/react-low-code/theory/tree/master/server 找到全部源碼。

在 Node.js 中使用 TypeScript

在項(xiàng)目中安裝 TypeScript,并在根目錄創(chuàng)建 tsconfig.json,內(nèi)容如下:

{
  'compilerOptions': {
    'rootDir''./src',
    'outDir''./dist',
    'esModuleInterop'true,
    'strict'true,
    'moduleResolution''node',
    'isolatedModules'true,
    'module''ESNext',
    'target''ESNext',
  },
  'ts-node': {
    'esm'true
  },
  'exclude': [
    './node_modules'
  ]
}

TypeScript官方網(wǎng)站(https://www./tsconfig) 羅列了 TypeScript 配置文件全部字段的含義。

監(jiān)聽代碼的變更

nodemon 能檢測(cè) Node.js 應(yīng)用程序中代碼的任何變更,當(dāng)有文件變更,它會(huì)重啟服務(wù)執(zhí)行代碼。自v1.19.0 之后,nodemon 不需要手動(dòng)配置即可支持 TypeScript 文件。默認(rèn)情況,nodemon 使用node cli 運(yùn)行 JavaScript 文件,使用 ts-node 運(yùn)行 TypeScript 文件,因此用 nodemon 監(jiān)聽 TypeScript 文件的變化,除了要安裝 nodemon 還要安裝 ts-node。如果需要自定義 nodemon 的行為,可在項(xiàng)目根目錄中新建 nodemon.json,它是 nodemon 的配置文件。

在 package.json 增加 scripts,使 yarn server 指向 nodemon ./src/index.ts:

'scripts': {
    'server''nodemon ./src/index.ts'
}

啟動(dòng) Web 服務(wù)器

用 Koa 啟動(dòng)一個(gè) Web 服務(wù)器非常簡(jiǎn)單,代碼清單 1 如下:

import Koa from 'koa'

const app = new Koa()
app.use(context => {
    context.body = 'Hello Koa';
})

app.listen(3000)

運(yùn)行上述代碼在瀏覽器訪問 http://localhost:3000/, 如果一切正常,那么瀏覽器將顯示'Hello Koa’這串字符串。

app.listen

app.listen 看上去像是監(jiān)聽某個(gè)端口,實(shí)際上它是創(chuàng)建并返回HTTP服務(wù)器,是如下代碼的簡(jiǎn)寫:

http.createServer(app.callback()).listen(...)

在同一個(gè) Koa 應(yīng)用程序中可以多次調(diào)用app.listen創(chuàng)建多個(gè) HTTP 服務(wù)器,比如在代碼清單 1 新增app.listen(3001),然后在瀏覽器訪問 http://localhost:3001/, 網(wǎng)頁將顯示'Hello Koa’這串字符串。

app.use

前面提到過 Koa 本身的代碼很簡(jiǎn)潔,開發(fā)人員可以使用不同的中間件增強(qiáng) Koa 的功能,中間件可以是開源的 npm 包,也可以是你自己在項(xiàng)目中開發(fā)的一個(gè)函數(shù)。調(diào)用 app.use ()添加中間件,代碼如下:

app.use(async(context, next) => {
    // 在響應(yīng)頭中增加 X-Response-Time
    context.set('X-Response-Time'`${new Date().getTime()}`);
    await next()
    console.log('finish')
})

app.use(async(context) => {
    console.log('set body')
    context.body = 'Hello Koa';
})

上述代碼給 app 添加了兩個(gè)中間,第一個(gè)中間件在調(diào)用 next() 之后暫停執(zhí)行,將代碼的執(zhí)行權(quán)交給第二個(gè)中間件,當(dāng)?shù)诙€(gè)中間件執(zhí)行結(jié)束之后,代碼的執(zhí)行權(quán)又回到第一個(gè)中間件,因此console.log('set body') 會(huì)比 console.log('finish') 早執(zhí)行。

context

代碼清單 1 使用了 context 變量,它一個(gè)Context對(duì)象,在中間件之間共享,包含很多屬性和方法,每個(gè)請(qǐng)求都有一個(gè) Context 對(duì)象。如果要將某個(gè)中間件的處理結(jié)果傳遞到其他中間件,那么可以將數(shù)據(jù)保存到 Context 對(duì)象上。

總結(jié)

想要 nodemon 監(jiān)聽 TypeScript 文件的變化,除了需要安裝 nodemon,還有安裝 ts-node,其他部分與直接用 JavaScript 開發(fā) Node 項(xiàng)目沒有區(qū)分。

圖片

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日本高清一区免费不卡| 九九蜜桃视频香蕉视频| 日本美国三级黄色aa| 国产亚州欧美一区二区| 亚洲国产成人一区二区在线观看| 美女露小粉嫩91精品久久久 | 麻豆印象传媒在线观看| 国产综合一区二区三区av | 女同伦理国产精品久久久| 中文字幕在线五月婷婷| 国产日韩欧美综合视频| 狠狠亚洲丁香综合久久| av在线免费播放一区二区| 五月天丁香婷婷狠狠爱| 中文字日产幕码三区国产| 国产午夜福利在线观看精品| 熟女少妇久久一区二区三区| 日韩精品一级一区二区| 日本道播放一区二区三区| 中文字幕亚洲人妻在线视频| 国产精品一区二区三区黄色片| 亚洲熟女精品一区二区成人| 婷婷基地五月激情五月| 最近日韩在线免费黄片| 欧美一级日韩中文字幕| 五月情婷婷综合激情综合狠狠| 色综合伊人天天综合网中文| 黄片在线免费看日韩欧美| 在线日本不卡一区二区| 国产成人国产精品国产三级| 自拍偷拍一区二区三区| 韩日黄片在线免费观看| 亚洲av又爽又色又色| 国产精品涩涩成人一区二区三区| 韩日黄片在线免费观看| 少妇激情在线免费观看| 欧美日韩无卡一区二区| 少妇视频一区二区三区| 中文字幕91在线观看| 一区二区三区18禁看| 亚洲国产精品国自产拍社区|