constのKOA =( 'KOA'が必要です) constのパス =必要( 'パス' ) のconstのfs =必要( 'FS' ) のconstパントマイム =は(」./のutil / mimes.js'必要) するvarアプリ= 新しいKOAを() アプリを.USE(非同期CTX => { せfullStaticPath = path.join(__ DIRNAME、 './static' ) _contentせ =を待つコンテンツ(CTX、fullStaticPath) _mimeせ = praseMime(ctx.url)の 場合(_mime){ ctx.type = _mime } ctx.body = _content }) app.listen( 3000 ) はconsole.log( 'ATを起動[デモ]スタティックサーバポート3000' ) / * * *取得静的リソースコンテンツ * * @param {オブジェクト}コンテキストCTX KOA * @param {文字列} fullStaticPathスタティックローカルリソースディレクトリの絶対パス * @return {文字列}がローカルコンテンツ要求を取得 * / 非同期関数コンテンツ(CTX、fullStaticPath){ LET reqPath = path.join(fullStaticPath、ctx.url) にconsole.log(「reqPath。 'reqPath) letの存在 = fs.existsSync(reqPath) はconsole.log( 'が存在し' 存在する) LETコンテンツ =' ' 場合(!が存在する){ コンテンツ '404が見つかりません' = } 他{ STATましょう = fs.statSync(reqPath) はconsole.log( 'STAT:'を、STAT) であれば(stat.isDirectory()){ ましょうcontentList = fs.readdirSync (reqPath) はconsole.log( 'contentList:' 、contentList) HTMLせ = `<UL> ` のため(LET [インデックス、項目] contentList.entriesの()){ HTML = '$ {HTML} <LI> <A href = "$ {ctx.url === '/' '':?ctx.url} / $ {項目}"> $ {項目}する</a> ` } コンテンツ = '$ {HTML} </ UL> ` } 他{ 含有量は = fs.readFileSync(reqPath、 'バイナリ'待つ) } } はconsole.log( 'コンテンツ' 、コンテンツ) 戻りコンテンツ } / * * *解析を资源类型 * * @param {文字列}のURL ctx.url * / 機能praseMime(URL){ せEXTNAME = path.extname(URL) はconsole.log( 'EXTNAME:' 、EXTNAME) EXTNAME = EXTNAME?extName.slice(1): '不明' リターンパントマイム[EXTNAME] }
せマイム= { 'CSS': 'テキスト/ CSS' 、 '未満': 'テキスト/ CSS' 、 'GIF': 'イメージ/ GIF' 、 'HTML': 'テキスト/ HTML' 、 'ICO':「画像/ X-アイコン」、 'JPEG': '画像/ JPEG' 、 'JPG': '画像/ JPEG' 、 'JS': 'テキスト/ javascriptの' 、 'JSON': 'アプリケーション/ JSON' 、 'PDF': 'アプリケーション/ PDF' 、 'PNG': '画像/ PNG' 、 'SVG': '画像/ SVG + XML' 、 'SWF': 'アプリケーション/ X-衝撃波フラッシュ」 、 'TIFF': 'イメージ/いさかい' 、 'TXT': 'text / plainの' 、 'WAV': 'オーディオ/ X-WAV' 、 'WMA': 'オーディオ/ X-MS-WMA' 、 'WMV': 'ビデオ/ X-MS-WMV' 、 'XML': 'テキスト/ XML' } module.exportsは =パントマイム
読み取りおよび書き込みだけでなく、KOAの根拠するファイルやディレクトリnodejsおなじみの、静的リソースサーバを実現