最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何搭建Node.js服務(wù)器

 更新時間:2025年06月24日 11:55:27   作者:讓我看看好學(xué)嗎.  
本文介紹如何搭建Node.js服務(wù)器,涵蓋HTTP路由、靜態(tài)資源處理(異步文件操作、目錄索引、Content-Type設(shè)置)、GET/POST參數(shù)解析及事件監(jiān)聽,各模塊代碼獨(dú)立運(yùn)行并附注釋,對node.js服務(wù)器搭建感興趣的朋友一起看看吧

1.基礎(chǔ)HTTP服務(wù)器:

  • 添加了路由處理
  • 添加了404錯誤處理
  • 添加了服務(wù)器錯誤監(jiān)聽

2.靜態(tài)資源服務(wù)器:

  • 使用異步文件操作
  • 支持目錄自動索引(默認(rèn)加載 index.html)
  • 自動檢測文件類型并設(shè)置正確Content-Type
  • 更完善的錯誤處理

3.處理GET請求參數(shù)

  • 提供了一個HTML表單用于測試
  • 使用url模塊解析URL和查詢參數(shù)
  • 清晰展示接收到的GET參數(shù)

4.處理POST請求參數(shù):

  • 提供了一個HTML表單用于測試
  • 使用流的方式處理POST數(shù)據(jù)
  • 正確解析表單數(shù)據(jù)
  • 清晰展示接收到的POST參數(shù)

一、HTTP模塊

const http = require("http");
// 創(chuàng)建服務(wù)器實(shí)例
const app = http.createServer((req, res) => {
    // 設(shè)置響應(yīng)頭,指定內(nèi)容類型和編碼
    res.setHeader("Content-Type", "text/html;charset=utf-8");
    // 根據(jù)請求路徑返回不同內(nèi)容
    switch (req.url) {
        case "/":
            res.end("歡迎訪問主頁!");
            break;
        case "/about":
            res.end("這是關(guān)于頁面!");
            break;
        default:
            res.statusCode = 404;
            res.end("404 - 頁面未找到");
    }
});
// 監(jiān)聽端口并啟動服務(wù)器
app.listen(5000, () => {
    console.log("服務(wù)器已啟動!監(jiān)聽在 http://localhost:5000");
});
// 添加錯誤處理
app.on("error", (error) => {
    console.error(`服務(wù)器啟動失敗: ${error.message}`);
});    

二、靜態(tài)資源服務(wù)器

const http = require("http");
const fs = require("fs").promises;
const path = require("path");
// 定義靜態(tài)資源目錄
const STATIC_DIR = path.join(__dirname, "static");
// 內(nèi)容類型映射表
const CONTENT_TYPES = {
    ".html": "text/html",
    ".css": "text/css",
    ".js": "text/javascript",
    ".json": "application/json",
    ".png": "image/png",
    ".jpg": "image/jpeg",
    ".gif": "image/gif",
    ".svg": "image/svg+xml",
    ".txt": "text/plain"
};
const app = http.createServer(async (req, res) => {
    try {
        // 構(gòu)建文件路徑
        let filePath = path.join(STATIC_DIR, req.url === "/" ? "index.html" : req.url);
        // 檢查文件是否存在
        await fs.access(filePath);
        // 獲取文件狀態(tài)
        const stat = await fs.stat(filePath);
        if (stat.isDirectory()) {
            // 如果是目錄,嘗試默認(rèn)文件
            filePath = path.join(filePath, "index.html");
            await fs.access(filePath);
        }
        // 獲取文件擴(kuò)展名并確定內(nèi)容類型
        const extname = path.extname(filePath);
        const contentType = CONTENT_TYPES[extname] || "application/octet-stream";
        // 設(shè)置響應(yīng)頭并發(fā)送文件內(nèi)容
        res.setHeader("Content-Type", contentType);
        const fileContent = await fs.readFile(filePath);
        res.end(fileContent);
    } catch (error) {
        // 處理錯誤
        res.statusCode = 404;
        res.end("404 - 文件未找到");
    }
});
app.listen(3000, () => {
    console.log("服務(wù)器監(jiān)聽在 http://localhost:3000");
});    

三、服務(wù)器獲取get請求參數(shù)

在./static下面寫一個index.html頁面,頁面中發(fā)送一個get請求

const http = require("http");
const url = require("url");
const qs = require("querystring");
const app = http.createServer((req, res) => {
    res.setHeader("Content-Type", "text/html;charset=utf-8");
    // 解析URL和查詢參數(shù)
    const parsedUrl = url.parse(req.url, true);
    const pathname = parsedUrl.pathname;
    const query = parsedUrl.query;
    if (pathname === "/") {
        // 返回表單頁面
        const formHtml = `
            <form method="GET" action="/api">
                <input type="text" name="username" placeholder="用戶名">
                <input type="password" name="password" placeholder="密碼">
                <button type="submit">提交</button>
            </form>
        `;
        res.end(formHtml);
    } else if (pathname === "/api") {
        // 處理GET請求參數(shù)
        res.end(`收到GET請求,參數(shù):${JSON.stringify(query)}`);
    } else {
        res.statusCode = 404;
        res.end("404 - 頁面未找到");
    }
});
app.listen(8888, () => {
    console.log("服務(wù)器已啟動!地址為: http://localhost:8888");
});    

 四、服務(wù)器獲取post請求參數(shù)

獲取post請求的參數(shù),通過給req綁定事件和end事件,來獲取監(jiān)聽的參數(shù),data事件一個接收的事件,end事件 當(dāng)post請求的參數(shù)都接收完畢,就出發(fā)end事件

const http = require("http");
const qs = require("querystring");
const app = http.createServer((req, res) => {
    res.setHeader("Content-Type", "text/html;charset=utf-8");
    if (req.url === "/") {
        // 返回表單頁面
        const formHtml = `
            <form method="POST" action="/api">
                <input type="text" name="username" placeholder="用戶名">
                <input type="password" name="password" placeholder="密碼">
                <button type="submit">提交</button>
            </form>
        `;
        res.end(formHtml);
    } else if (req.url === "/api" && req.method === "POST") {
        // 處理POST請求
        let body = "";
        // 監(jiān)聽data事件,收集數(shù)據(jù)塊
        req.on("data", (chunk) => {
            body += chunk.toString();
        });
        // 監(jiān)聽end事件,數(shù)據(jù)接收完成
        req.on("end", () => {
            // 解析表單數(shù)據(jù)
            const formData = qs.parse(body);
            // 返回處理結(jié)果
            res.end(`收到POST請求,參數(shù):${JSON.stringify(formData)}`);
        });
    } else {
        res.statusCode = 404;
        res.end("404 - 頁面未找到");
    }
});
app.listen(8888, () => {
    console.log("服務(wù)器已啟動!地址為: http://localhost:8888");
});    

每個步驟的代碼都可以獨(dú)立運(yùn)行,并且包含了必要的注釋以便理解

到此這篇關(guān)于搭建Node.js服務(wù)器的文章就介紹到這了,更多相關(guān)node.js服務(wù)器搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • node.js express框架實(shí)現(xiàn)文件上傳與下載功能實(shí)例詳解

    node.js express框架實(shí)現(xiàn)文件上傳與下載功能實(shí)例詳解

    這篇文章主要介紹了node.js express框架實(shí)現(xiàn)文件上傳與下載功能,結(jié)合具體實(shí)例形式詳細(xì)分析了node.js express框架針對文件上傳與下載的前后臺相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • node.js中的fs.chmodSync方法使用說明

    node.js中的fs.chmodSync方法使用說明

    這篇文章主要介紹了node.js中的fs.chmodSync方法使用說明,本文介紹了fs.chmodSync方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Visual?Studio?Code中npm腳本找不到圖文解決辦法

    Visual?Studio?Code中npm腳本找不到圖文解決辦法

    這篇文章主要給大家介紹了關(guān)于Visual?Studio?Code中npm腳本找不到的圖文解決辦法,做前端開發(fā)如果項(xiàng)目達(dá)到了一定的規(guī)模就離不開npm了,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 如何用nodejs搭建代理服務(wù)器

    如何用nodejs搭建代理服務(wù)器

    這篇文章主要介紹了如何用nodejs搭建代理服務(wù)器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • node版本升級后項(xiàng)目跑不起來的幾種報錯及解決方案

    node版本升級后項(xiàng)目跑不起來的幾種報錯及解決方案

    升級Node.js版本時,最常見的問題就是依賴沖突,由于新版本的Node.js可能不再支持某些舊版本的依賴包,或者依賴包之間存在版本不兼容的情況,導(dǎo)致升級后項(xiàng)目無法正常運(yùn)行,這篇文章主要介紹了node版本升級后項(xiàng)目跑不起來的幾種報錯及解決方案,需要的朋友可以參考下
    2026-05-05
  • nodejs之koa2請求示例(GET,POST)

    nodejs之koa2請求示例(GET,POST)

    本篇文章主要介紹了nodejs之koa2請求示例(GET,POST),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • node.js中koa和express的差異對比

    node.js中koa和express的差異對比

    Express和koa都是服務(wù)端的開發(fā)框架,服務(wù)端開發(fā)的重點(diǎn)是對HTTP Request和HTTP Response兩個對象的封裝和處理,下面這篇文章主要給大家介紹了關(guān)于node.js中koa和express的差異對比,需要的朋友可以參考下
    2023-05-05
  • nodejs實(shí)現(xiàn)一個word文檔解析器思路詳解

    nodejs實(shí)現(xiàn)一個word文檔解析器思路詳解

    這篇文章主要介紹了nodejs實(shí)現(xiàn)一個word文檔解析器的思路詳解,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • Node.js中.npmrc文件的配置實(shí)現(xiàn)

    Node.js中.npmrc文件的配置實(shí)現(xiàn)

    .npmrc?文件是 npm 配置的核心文件,用于管理 npm 的行為,本文就來介紹一下Node .npmrc文件配置,具有一定的參考價值,感興趣的可以了解一下
    2024-12-12
  • Node.js搭建小程序后臺服務(wù)

    Node.js搭建小程序后臺服務(wù)

    最近在做微信的應(yīng)用號小程序開發(fā),小程序的后臺數(shù)據(jù)接口需要https安全請求,所以需要我的nodejs服務(wù)器能夠提供https的支持,現(xiàn)在就將整個https服務(wù)器的搭建過程說一下
    2018-01-01

最新評論

高州市| 巨野县| 岑巩县| 连城县| 鄂托克旗| 巴楚县| 桂东县| 宣汉县| 西畴县| 民乐县| 青浦区| 瑞昌市| 柘城县| 湘乡市| 福建省| 静宁县| 永定县| 亚东县| 阜南县| 都兰县| 靖边县| 芦山县| 平定县| 陵川县| 武宣县| 桐乡市| 神农架林区| 灵丘县| 碌曲县| 江永县| 达尔| 鹤庆县| 通州区| 稷山县| 鲁山县| 抚顺市| 长乐市| 绥阳县| 耿马| 马鞍山市| 汤阴县|