[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fhttp":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fhttp":1112,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fhttp":1138},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":14,"pinned":15,"draft":15,"body":16,"seo":1108,"stem":1109,"id":1110,"extension":1111},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fhttp","HTTP 服务器","Deno 提供了内置的 HTTP 服务器 API Deno.serve，无需安装任何第三方库即可创建高性能的 HTTP\u002F1.1 和 HTTP\u002F2 服务。它基于标准的 Web API Request 和 Response 对象，使得开发…","技能小册",[12,13],"deno","http","2020-12-11",false,{"type":17,"value":18,"toc":1095},"minimark",[19,23,28,45,50,144,151,173,186,190,196,282,306,314,324,475,480,497,510,514,517,828,833,860,864,905,909,944,947,1022,1037,1040,1091],[20,21,8],"h1",{"id":22},"http-服务器",[24,25,27],"h2",{"id":26},"deno-内置-http-服务器","Deno 内置 HTTP 服务器",[29,30,31,32,36,37,40,41,44],"p",{},"Deno 提供了内置的 HTTP 服务器 API ",[33,34,35],"code",{},"Deno.serve","，无需安装任何第三方库即可创建高性能的 HTTP\u002F1.1 和 HTTP\u002F2 服务。它基于标准的 Web API ",[33,38,39],{},"Request"," 和 ",[33,42,43],{},"Response"," 对象，使得开发者可以快速上手。",[46,47,49],"h3",{"id":48},"一简单示例","一、简单示例",[51,52,57],"pre",{"className":53,"code":54,"language":55,"meta":56,"style":56},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark","\u002F\u002F server.ts\nDeno.serve((_req) => {\n  return new Response(\"Hello, World!\");\n});\n","typescript","",[33,58,59,68,102,134],{"__ignoreMap":56},[60,61,64],"span",{"class":62,"line":63},"line",1,[60,65,67],{"class":66},"sutJx","\u002F\u002F server.ts\n",[60,69,71,75,79,83,86,88,92,95,99],{"class":62,"line":70},2,[60,72,74],{"class":73},"su5hD","Deno",[60,76,78],{"class":77},"sP7_E",".",[60,80,82],{"class":81},"sGLFI","serve",[60,84,85],{"class":73},"(",[60,87,85],{"class":77},[60,89,91],{"class":90},"s99_P","_req",[60,93,94],{"class":77},")",[60,96,98],{"class":97},"sbsja"," =>",[60,100,101],{"class":77}," {\n",[60,103,105,109,113,116,119,123,127,129,131],{"class":62,"line":104},3,[60,106,108],{"class":107},"sVHd0","  return",[60,110,112],{"class":111},"smGrS"," new",[60,114,115],{"class":81}," Response",[60,117,85],{"class":118},"skxfh",[60,120,122],{"class":121},"sjJ54","\"",[60,124,126],{"class":125},"s_sjI","Hello, World!",[60,128,122],{"class":121},[60,130,94],{"class":118},[60,132,133],{"class":77},";\n",[60,135,137,140,142],{"class":62,"line":136},4,[60,138,139],{"class":77},"}",[60,141,94],{"class":73},[60,143,133],{"class":77},[29,145,146,150],{},[147,148,149],"strong",{},"运行","（需要明确授予网络权限）：",[51,152,156],{"className":153,"code":154,"language":155,"meta":56,"style":56},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","deno run --allow-net server.ts\n","bash",[33,157,158],{"__ignoreMap":56},[60,159,160,163,166,170],{"class":62,"line":63},[60,161,12],{"class":162},"sbgvK",[60,164,165],{"class":125}," run",[60,167,169],{"class":168},"stzsN"," --allow-net",[60,171,172],{"class":125}," server.ts\n",[174,175,176],"blockquote",{},[29,177,178,179,181,182,185],{},"注意：",[33,180,35],{}," 默认监听 ",[33,183,184],{},"0.0.0.0:8000","。如果端口被占用，会抛出异常。",[46,187,189],{"id":188},"二监听指定端口和主机名","二、监听指定端口和主机名",[29,191,192,193,195],{},"通过给 ",[33,194,35],{}," 传递第一个参数（配置对象），可以自定义端口和主机名。",[51,197,199],{"className":53,"code":198,"language":55,"meta":56,"style":56},"Deno.serve({ port: 4242, hostname: \"0.0.0.0\" }, (_req) => {\n  return new Response(\"Hello, World!\");\n});\n",[33,200,201,254,274],{"__ignoreMap":56},[60,202,203,205,207,209,211,214,217,220,224,227,230,232,235,238,240,243,246,248,250,252],{"class":62,"line":63},[60,204,74],{"class":73},[60,206,78],{"class":77},[60,208,82],{"class":81},[60,210,85],{"class":73},[60,212,213],{"class":77},"{",[60,215,216],{"class":118}," port",[60,218,219],{"class":77},":",[60,221,223],{"class":222},"srdBf"," 4242",[60,225,226],{"class":77},",",[60,228,229],{"class":118}," hostname",[60,231,219],{"class":77},[60,233,234],{"class":121}," \"",[60,236,237],{"class":125},"0.0.0.0",[60,239,122],{"class":121},[60,241,242],{"class":77}," },",[60,244,245],{"class":77}," (",[60,247,91],{"class":90},[60,249,94],{"class":77},[60,251,98],{"class":97},[60,253,101],{"class":77},[60,255,256,258,260,262,264,266,268,270,272],{"class":62,"line":70},[60,257,108],{"class":107},[60,259,112],{"class":111},[60,261,115],{"class":81},[60,263,85],{"class":118},[60,265,122],{"class":121},[60,267,126],{"class":125},[60,269,122],{"class":121},[60,271,94],{"class":118},[60,273,133],{"class":77},[60,275,276,278,280],{"class":62,"line":104},[60,277,139],{"class":77},[60,279,94],{"class":73},[60,281,133],{"class":77},[283,284,285,296],"ul",{},[286,287,288,291,292,295],"li",{},[33,289,290],{},"port","：监听的端口号（默认 ",[33,293,294],{},"8000","）。",[286,297,298,301,302,305],{},[33,299,300],{},"hostname","：监听的网络接口（默认 ",[33,303,304],{},"\"0.0.0.0\""," 表示所有可用接口）。",[46,307,309,310,313],{"id":308},"三推荐方式deno-serve-命令","三、推荐方式：",[33,311,312],{},"deno serve"," 命令",[29,315,316,317,319,320,323],{},"Deno 提供了一个专用的 ",[33,318,312],{}," 命令，可以以更简洁的方式运行 HTTP 服务器。使用该命令时，文件必须导出一个包含 ",[33,321,322],{},"fetch"," 处理函数的默认对象。",[51,325,327],{"className":53,"code":326,"language":55,"meta":56,"style":56},"\u002F\u002F server.ts\nexport default {\n  fetch(_req: Request) {\n    return new Response(\"Hello, World!\");\n  },\n  onListen({ hostname, port }) {\n    console.log(`Server running at http:\u002F\u002F${hostname}:${port}\u002F`);\n  },\n} satisfies Deno.ServeDefaultExport;\n",[33,328,329,333,343,362,383,389,409,452,457],{"__ignoreMap":56},[60,330,331],{"class":62,"line":63},[60,332,67],{"class":66},[60,334,335,338,341],{"class":62,"line":70},[60,336,337],{"class":107},"export",[60,339,340],{"class":107}," default",[60,342,101],{"class":77},[60,344,345,349,351,353,355,358,360],{"class":62,"line":104},[60,346,348],{"class":347},"sVXei","  fetch",[60,350,85],{"class":77},[60,352,91],{"class":90},[60,354,219],{"class":111},[60,356,357],{"class":162}," Request",[60,359,94],{"class":77},[60,361,101],{"class":77},[60,363,364,367,369,371,373,375,377,379,381],{"class":62,"line":136},[60,365,366],{"class":107},"    return",[60,368,112],{"class":111},[60,370,115],{"class":81},[60,372,85],{"class":118},[60,374,122],{"class":121},[60,376,126],{"class":125},[60,378,122],{"class":121},[60,380,94],{"class":118},[60,382,133],{"class":77},[60,384,386],{"class":62,"line":385},5,[60,387,388],{"class":77},"  },\n",[60,390,392,395,398,400,402,404,407],{"class":62,"line":391},6,[60,393,394],{"class":347},"  onListen",[60,396,397],{"class":77},"({",[60,399,229],{"class":90},[60,401,226],{"class":77},[60,403,216],{"class":90},[60,405,406],{"class":77}," })",[60,408,101],{"class":77},[60,410,412,415,417,420,422,425,428,431,433,435,437,439,441,443,446,448,450],{"class":62,"line":411},7,[60,413,414],{"class":73},"    console",[60,416,78],{"class":77},[60,418,419],{"class":81},"log",[60,421,85],{"class":118},[60,423,424],{"class":121},"`",[60,426,427],{"class":125},"Server running at http:\u002F\u002F",[60,429,430],{"class":121},"${",[60,432,300],{"class":73},[60,434,139],{"class":121},[60,436,219],{"class":125},[60,438,430],{"class":121},[60,440,290],{"class":73},[60,442,139],{"class":121},[60,444,445],{"class":125},"\u002F",[60,447,424],{"class":121},[60,449,94],{"class":118},[60,451,133],{"class":77},[60,453,455],{"class":62,"line":454},8,[60,456,388],{"class":77},[60,458,460,462,465,468,470,473],{"class":62,"line":459},9,[60,461,139],{"class":77},[60,463,464],{"class":107}," satisfies",[60,466,467],{"class":162}," Deno",[60,469,78],{"class":77},[60,471,472],{"class":162},"ServeDefaultExport",[60,474,133],{"class":77},[29,476,477,479],{},[147,478,149],{},"：",[51,481,483],{"className":153,"code":482,"language":155,"meta":56,"style":56},"deno serve --port=3000 server.ts\n",[33,484,485],{"__ignoreMap":56},[60,486,487,489,492,495],{"class":62,"line":63},[60,488,12],{"class":162},[60,490,491],{"class":125}," serve",[60,493,494],{"class":168}," --port=3000",[60,496,172],{"class":125},[29,498,499,501,502,505,506,509],{},[33,500,312],{}," 会自动处理权限（隐式添加 ",[33,503,504],{},"--allow-net","），并提供 ",[33,507,508],{},"--watch"," 等开发友好选项。",[46,511,513],{"id":512},"四路由示例","四、路由示例",[29,515,516],{},"根据请求的 URL 路径返回不同内容：",[51,518,520],{"className":53,"code":519,"language":55,"meta":56,"style":56},"export default {\n  fetch(request: Request) {\n    const url = new URL(request.url);\n\n    if (url.pathname === \"\u002Fapi\u002Fhealth\") {\n      return Response.json({ status: \"ok\" });\n    }\n\n    if (url.pathname === \"\u002Fapi\u002Fusers\") {\n      return Response.json([\n        { id: 1, name: \"Alice\" },\n        { id: 2, name: \"Bob\" },\n      ]);\n    }\n\n    return new Response(\"Not found\", { status: 404 });\n  },\n} satisfies Deno.ServeDefaultExport;\n",[33,521,522,530,547,577,583,613,648,653,657,682,696,727,754,762,767,772,808,813],{"__ignoreMap":56},[60,523,524,526,528],{"class":62,"line":63},[60,525,337],{"class":107},[60,527,340],{"class":107},[60,529,101],{"class":77},[60,531,532,534,536,539,541,543,545],{"class":62,"line":70},[60,533,348],{"class":347},[60,535,85],{"class":77},[60,537,538],{"class":90},"request",[60,540,219],{"class":111},[60,542,357],{"class":162},[60,544,94],{"class":77},[60,546,101],{"class":77},[60,548,549,552,556,559,561,564,566,568,570,573,575],{"class":62,"line":104},[60,550,551],{"class":97},"    const",[60,553,555],{"class":554},"s_hVV"," url",[60,557,558],{"class":111}," =",[60,560,112],{"class":111},[60,562,563],{"class":81}," URL",[60,565,85],{"class":118},[60,567,538],{"class":73},[60,569,78],{"class":77},[60,571,572],{"class":73},"url",[60,574,94],{"class":118},[60,576,133],{"class":77},[60,578,579],{"class":62,"line":136},[60,580,582],{"emptyLinePlaceholder":581},true,"\n",[60,584,585,588,590,592,594,597,600,602,605,607,610],{"class":62,"line":385},[60,586,587],{"class":107},"    if",[60,589,245],{"class":118},[60,591,572],{"class":73},[60,593,78],{"class":77},[60,595,596],{"class":73},"pathname",[60,598,599],{"class":111}," ===",[60,601,234],{"class":121},[60,603,604],{"class":125},"\u002Fapi\u002Fhealth",[60,606,122],{"class":121},[60,608,609],{"class":118},") ",[60,611,612],{"class":77},"{\n",[60,614,615,618,620,622,625,627,629,632,634,636,639,641,644,646],{"class":62,"line":391},[60,616,617],{"class":107},"      return",[60,619,115],{"class":73},[60,621,78],{"class":77},[60,623,624],{"class":81},"json",[60,626,85],{"class":118},[60,628,213],{"class":77},[60,630,631],{"class":118}," status",[60,633,219],{"class":77},[60,635,234],{"class":121},[60,637,638],{"class":125},"ok",[60,640,122],{"class":121},[60,642,643],{"class":77}," }",[60,645,94],{"class":118},[60,647,133],{"class":77},[60,649,650],{"class":62,"line":411},[60,651,652],{"class":77},"    }\n",[60,654,655],{"class":62,"line":454},[60,656,582],{"emptyLinePlaceholder":581},[60,658,659,661,663,665,667,669,671,673,676,678,680],{"class":62,"line":459},[60,660,587],{"class":107},[60,662,245],{"class":118},[60,664,572],{"class":73},[60,666,78],{"class":77},[60,668,596],{"class":73},[60,670,599],{"class":111},[60,672,234],{"class":121},[60,674,675],{"class":125},"\u002Fapi\u002Fusers",[60,677,122],{"class":121},[60,679,609],{"class":118},[60,681,612],{"class":77},[60,683,685,687,689,691,693],{"class":62,"line":684},10,[60,686,617],{"class":107},[60,688,115],{"class":73},[60,690,78],{"class":77},[60,692,624],{"class":81},[60,694,695],{"class":118},"([\n",[60,697,699,702,705,707,710,712,715,717,719,722,724],{"class":62,"line":698},11,[60,700,701],{"class":77},"        {",[60,703,704],{"class":118}," id",[60,706,219],{"class":77},[60,708,709],{"class":222}," 1",[60,711,226],{"class":77},[60,713,714],{"class":118}," name",[60,716,219],{"class":77},[60,718,234],{"class":121},[60,720,721],{"class":125},"Alice",[60,723,122],{"class":121},[60,725,726],{"class":77}," },\n",[60,728,730,732,734,736,739,741,743,745,747,750,752],{"class":62,"line":729},12,[60,731,701],{"class":77},[60,733,704],{"class":118},[60,735,219],{"class":77},[60,737,738],{"class":222}," 2",[60,740,226],{"class":77},[60,742,714],{"class":118},[60,744,219],{"class":77},[60,746,234],{"class":121},[60,748,749],{"class":125},"Bob",[60,751,122],{"class":121},[60,753,726],{"class":77},[60,755,757,760],{"class":62,"line":756},13,[60,758,759],{"class":118},"      ])",[60,761,133],{"class":77},[60,763,765],{"class":62,"line":764},14,[60,766,652],{"class":77},[60,768,770],{"class":62,"line":769},15,[60,771,582],{"emptyLinePlaceholder":581},[60,773,775,777,779,781,783,785,788,790,792,795,797,799,802,804,806],{"class":62,"line":774},16,[60,776,366],{"class":107},[60,778,112],{"class":111},[60,780,115],{"class":81},[60,782,85],{"class":118},[60,784,122],{"class":121},[60,786,787],{"class":125},"Not found",[60,789,122],{"class":121},[60,791,226],{"class":77},[60,793,794],{"class":77}," {",[60,796,631],{"class":118},[60,798,219],{"class":77},[60,800,801],{"class":222}," 404",[60,803,643],{"class":77},[60,805,94],{"class":118},[60,807,133],{"class":77},[60,809,811],{"class":62,"line":810},17,[60,812,388],{"class":77},[60,814,816,818,820,822,824,826],{"class":62,"line":815},18,[60,817,139],{"class":77},[60,819,464],{"class":107},[60,821,467],{"class":162},[60,823,78],{"class":77},[60,825,472],{"class":162},[60,827,133],{"class":77},[29,829,830,479],{},[147,831,832],{},"特点",[283,834,835,842,849],{},[286,836,837,838,841],{},"使用标准 ",[33,839,840],{},"URL"," 构造函数解析请求路径和查询参数。",[286,843,844,845,848],{},"使用 ",[33,846,847],{},"Response.json()"," 快捷方法返回 JSON 数据。",[286,850,851,852,855,856,859],{},"可以返回 ",[33,853,854],{},"404","、",[33,857,858],{},"500"," 等状态码。",[46,861,863],{"id":862},"五进阶用法","五、进阶用法",[283,865,866,883,891,899],{},[286,867,868,871,872,855,875,878,879,882],{},[147,869,870],{},"获取请求体","：通过 ",[33,873,874],{},"await request.json()",[33,876,877],{},"request.text()"," 或 ",[33,880,881],{},"request.formData()","。",[286,884,885,479,888,882],{},[147,886,887],{},"读取请求头",[33,889,890],{},"request.headers.get(\"content-type\")",[286,892,893,479,896,882],{},[147,894,895],{},"流式响应",[33,897,898],{},"return new Response(readableStream)",[286,900,901,904],{},[147,902,903],{},"强制使用 HTTP\u002F2","：Deno 会根据客户端能力自动协商，目前无需显式配置。",[46,906,908],{"id":907},"六注意事项","六、注意事项",[283,910,911,923,929],{},[286,912,913,916,917,919,920,922],{},[147,914,915],{},"权限要求","：必须授予 ",[33,918,504],{},"，否则 ",[33,921,35],{}," 会因权限错误而失败。",[286,924,925,928],{},[147,926,927],{},"并发模型","：Deno 默认使用多线程（基于 Tokio）处理请求，无需额外配置即可应对大量并发连接。",[286,930,931,934,935,937,938,40,940,943],{},[147,932,933],{},"生产部署","：建议搭配反向代理（如 Nginx）或直接使用 ",[33,936,312],{}," 配合 ",[33,939,504],{},[33,941,942],{},"--addr"," 参数。",[46,945,946],{"id":946},"总结",[948,949,950,963],"table",{},[951,952,953],"thead",{},[954,955,956,960],"tr",{},[957,958,959],"th",{},"特性",[957,961,962],{},"说明",[964,965,966,978,986,993,1002,1012],"tbody",{},[954,967,968,972],{},[969,970,971],"td",{},"API",[969,973,974,878,976,313],{},[33,975,35],{},[33,977,312],{},[954,979,980,983],{},[969,981,982],{},"协议",[969,984,985],{},"HTTP\u002F1.1 + HTTP\u002F2",[954,987,988,991],{},[969,989,990],{},"默认端口",[969,992,294],{},[954,994,995,998],{},[969,996,997],{},"权限",[969,999,1000],{},[33,1001,504],{},[954,1003,1004,1007],{},[969,1005,1006],{},"响应对象",[969,1008,1009,1010],{},"标准 ",[33,1011,43],{},[954,1013,1014,1017],{},[969,1015,1016],{},"推荐方式",[969,1018,1019],{},[33,1020,1021],{},"deno serve server.ts",[29,1023,1024,1025,1032,1033,1036],{},"Deno 内置的 HTTP 服务器足以支撑中小规模服务，且与 Web 标准完全兼容。更复杂的路由、中间件可结合 ",[1026,1027,1031],"a",{"href":1028,"rel":1029},"https:\u002F\u002Fhono.dev\u002F",[1030],"nofollow","Hono"," 等框架（通过 ",[33,1034,1035],{},"npm:hono"," 或 JSR 引入）。",[24,1038,1039],{"id":1039},"参考文献",[948,1041,1042,1051],{},[951,1043,1044],{},[954,1045,1046,1049],{},[957,1047,1048],{},"资料",[957,1050,962],{},[964,1052,1053,1064,1075],{},[954,1054,1055,1061],{},[969,1056,1057],{},[1026,1058,35],{"href":1059,"rel":1060},"https:\u002F\u002Fdocs.deno.com\u002Fapi\u002Fdeno\u002F~\u002FDeno.serve",[1030],[969,1062,1063],{},"API 参考",[954,1065,1066,1072],{},[969,1067,1068],{},[1026,1069,312],{"href":1070,"rel":1071},"https:\u002F\u002Fdocs.deno.com\u002Fruntime\u002Freference\u002Fcli\u002Fserve\u002F",[1030],[969,1073,1074],{},"CLI",[954,1076,1077,1084],{},[969,1078,1079],{},[1026,1080,1083],{"href":1081,"rel":1082},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FFetch_API",[1030],"Web Fetch API",[969,1085,1086,1088,1089],{},[33,1087,39],{}," \u002F ",[33,1090,43],{},[1092,1093,1094],"style",{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVXei, html code.shiki .sVXei{--shiki-light:#E53935;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":56,"searchDepth":70,"depth":70,"links":1096},[1097,1107],{"id":26,"depth":70,"text":27,"children":1098},[1099,1100,1101,1103,1104,1105,1106],{"id":48,"depth":104,"text":49},{"id":188,"depth":104,"text":189},{"id":308,"depth":104,"text":1102},"三、推荐方式：deno serve 命令",{"id":512,"depth":104,"text":513},{"id":862,"depth":104,"text":863},{"id":907,"depth":104,"text":908},{"id":946,"depth":104,"text":946},{"id":1039,"depth":70,"text":1039},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fend\u002FDeno\u002Fhttp","knowledge\u002Fknowledge\u002Fbooklet\u002Fend\u002FDeno\u002Fhttp.md","md",{"items":1113},[1114,1118,1122,1126,1130,1134],{"path":1115,"title":1116,"description":1117,"category":10,"score":391},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fbase","Deno 基础","Deno 是基于 V8 与 Rust 的 JavaScript\u002FTypeScript 运行时，由 Node.js 原作者 Ryan Dahl 发起。官方文档：docs.deno.com。与 Node、Bun 的对比见 运行时对比。",{"path":1119,"title":1120,"description":1121,"category":10,"score":391},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Ftools","内置工具链","Deno 提供了开箱即用的工具链，无需安装任何第三方依赖即可完成代码格式化、检查、测试、覆盖率、文档生成和基准测试等任务。",{"path":1123,"title":1124,"description":1125,"category":10,"score":391},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Finit","项目初始化与基础命令","Deno 提供了开箱即用的项目管理工具集，无需额外配置即可初始化项目、运行脚本、执行代码片段等。",{"path":1127,"title":1128,"description":1129,"category":10,"score":391},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fpackage","包管理与依赖","Deno 以 deno.json 管理项目（imports、tasks 等），依赖通过 URL、jsr:、npm: 解析并缓存到本地（默认 DENO_DIR），通常不需要像 Node 那样维护庞大的 node_modules 树。在需…",{"path":1131,"title":1132,"description":1133,"category":10,"score":391},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fother","其他配置","Deno 默认禁止访问环境变量，以遵循最小权限原则。必须通过 --allow-env 标志显式开启。",{"path":1135,"title":1136,"description":1137,"category":10,"score":391},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Fauth","权限模型","Deno 默认在安全的沙盒环境中执行任何代码——无论是你的主程序还是第三方依赖，都没有文件、网络、环境变量或子进程的访问权限。只有通过 命令行标志显式授予 的权限才能被使用。",{"series":1139,"title":12,"items":1140,"index":70,"prev":1158,"next":1159},"booklet\u002Fend\u002Fdeno",[1141,1143,1145,1146,1148,1152,1154,1156],{"path":1135,"title":1136,"date":1142,"pinned":15},"2021-04-01",{"path":1115,"title":1116,"date":1144,"pinned":15},"2026-06-01",{"path":7,"title":8,"date":14,"pinned":15},{"path":1123,"title":1124,"date":1147,"pinned":15},"2025-02-14",{"path":1149,"title":1150,"date":1151,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fdeno\u002Finstall","安装与环境","2021-02-05",{"path":1131,"title":1132,"date":1153,"pinned":15},"2022-02-08",{"path":1127,"title":1128,"date":1155,"pinned":15},"2024-07-21",{"path":1119,"title":1120,"date":1157,"pinned":15},"2026-01-24",{"path":1115,"title":1116,"date":1144,"pinned":15},{"path":1123,"title":1124,"date":1147,"pinned":15}]