国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

Node.js搭建WEB服務(wù)器的示例代碼

2024-05-06 15:31:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

這幾天為了熟悉vue.js框架,還有webpack的使用,就準(zhǔn)備搭建一個(gè)發(fā)布和瀏覽markdwon的簡(jiǎn)單WEB應(yīng)用。原本是想著用bash腳本和busybox的httpd來(lái)作為后臺(tái)服務(wù),但是bash腳本解析和生成JSON非常不方便,而用Java語(yǔ)言寫(xiě)又覺(jué)得部署不方便,所以就想到了正在用到的Node.js,于是就有了這篇博文。(文末有本文代碼的github地址)

簡(jiǎn)單例子

首先,從搭建最簡(jiǎn)單的 Hello world 開(kāi)始,建立以下目錄、文件和內(nèi)容。

建立項(xiàng)目及運(yùn)行

project

web-server+ | - server.js

server.js

const http = require('http');http.createServer(function(request, response) { // 設(shè)置響應(yīng)頭 response.writeHeader(200, {  "Content-Type" : "text/plain" }); // 響應(yīng)主體為 "Hello world!" response.write("Hello world!"); response.end();})// 設(shè)置監(jiān)聽(tīng)端口為9000.listen(9000);

現(xiàn)在,在項(xiàng)目目錄運(yùn)行下面命令來(lái)執(zhí)行 server.js ,瀏覽器地址欄中輸入 localhost:9000 ,如果一切訪問(wèn)都正常,瀏覽器就會(huì)顯示 Hello world! 。

node server.js

提示:使用 ctrl+c 停止腳本運(yùn)行。

至此一個(gè)簡(jiǎn)單例子就運(yùn)行成功了,下面來(lái)分析一下代碼。

代碼分析

首先, server.js 中引入了Node.js的 http模塊 ,它提供了非常底層HTTP API支持。這里使用 createServer() 方法,它返回一個(gè) http.server 實(shí)例,使用該實(shí)例的 listen() 方法來(lái)設(shè)置監(jiān)聽(tīng)端口。

方法 createSever() 中填寫(xiě)的參數(shù)是一個(gè)函數(shù),該函數(shù)會(huì)作為回調(diào)函數(shù)自動(dòng)添加到 request事件 去,其參數(shù)類(lèi)型分別為 http.IncomingMessage 和 http.ServerResponse 。在回調(diào)函數(shù)體里,利用 http.ServerResponse 的方法設(shè)置了響應(yīng)頭和響應(yīng)主體,最后以 end() 方法結(jié)束本次請(qǐng)求。

路由功能

上述的例子僅僅實(shí)現(xiàn)了簡(jiǎn)單請(qǐng)求響應(yīng)功能,現(xiàn)在增加路由的功能來(lái)健壯我們的WEB服務(wù)器。現(xiàn)在,修改為以下的目錄、文件和內(nèi)容。

實(shí)現(xiàn)簡(jiǎn)單路由

project

web-server | - server.js+ | - router.js

server.js

const http = require('http');const router = require('./router.js');function handleHello(request, response) { // 設(shè)置響應(yīng)頭 response.writeHeader(200, {  "Content-Type" : "text/plain" }); // 響應(yīng)主體為 "Hello world!" response.write("Hello world!"); response.end();}http.createServer(function(request, response) { // 注冊(cè)路徑和其對(duì)應(yīng)回調(diào)函數(shù) router.register(request, response, [  {   'url': '/hello',   'handler': handleHello  } ]);})// 設(shè)置監(jiān)聽(tīng)端口為9000.listen(9000);

router.js

const url = require('url');exports.register = function(request, response, mapping) { // 解析請(qǐng)求路徑 var pathName = url.parse(request.url).pathname; // 執(zhí)行相應(yīng)請(qǐng)求路徑的回調(diào)函數(shù) for(let i = 0, len = mapping.length;i < len;i++) {  if(mapping[i].url === pathName) {   mapping[i].handler(request, response);   return;  } } // 請(qǐng)求路徑不存在返回404頁(yè)面 response.writeHeader(404, {  "Content-Type" : "text/html" }); response.end(`  <html>   <head>    <title>NOT FOUND</title>   </head>   <body>    <h1>404 NOT FOUND</h1>   </body>  </html> `);}            
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 舒兰市| 松阳县| 新兴县| 嘉荫县| 古蔺县| 恩施市| 永清县| 张家界市| 万安县| 河池市| 腾冲县| 和平区| 乌鲁木齐市| 宜良县| 蓬安县| 岚皋县| 夏津县| 确山县| 河曲县| 平安县| 武汉市| 云阳县| 青阳县| 东乡| 靖宇县| 邻水| 郧西县| 广德县| 博野县| 隆尧县| 溧水县| 玛纳斯县| 宜都市| 武山县| 台安县| 北宁市| 古田县| 美姑县| 阳泉市| 崇左市| 合作市|