如何搭建Node.js服务器

 更新时间:2025年06月24日 11:55:27   作者:让我看看好学吗.  
本文介绍如何搭建Node.js服务器,涵盖HTTP路由、静态资源处理(异步文件操作、目录索引、Content-Type设置)、GET/POST参数解析及事件监听,各模块代码独立运行并附注释,对node.js服务器搭建感兴趣的朋友一起看看吧

1.基础HTTP服务器:

  • 添加了路由处理
  • 添加了404错误处理
  • 添加了服务器错误监听

2.静态资源服务器:

  • 使用异步文件操作
  • 支持目录自动索引(默认加载 index.html)
  • 自动检测文件类型并设置正确Content-Type
  • 更完善的错误处理

3.处理GET请求参数

  • 提供了一个HTML表单用于测试
  • 使用url模块解析URL和查询参数
  • 清晰展示接收到的GET参数

4.处理POST请求参数:

  • 提供了一个HTML表单用于测试
  • 使用流的方式处理POST数据
  • 正确解析表单数据
  • 清晰展示接收到的POST参数

一、HTTP模块

const http = require("http");
// 创建服务器实例
const app = http.createServer((req, res) => {
    // 设置响应头,指定内容类型和编码
    res.setHeader("Content-Type", "text/html;charset=utf-8");
    // 根据请求路径返回不同内容
    switch (req.url) {
        case "/":
            res.end("欢迎访问主页!");
            break;
        case "/about":
            res.end("这是关于页面!");
            break;
        default:
            res.statusCode = 404;
            res.end("404 - 页面未找到");
    }
});
// 监听端口并启动服务器
app.listen(5000, () => {
    console.log("服务器已启动!监听在 http://localhost:5000");
});
// 添加错误处理
app.on("error", (error) => {
    console.error(`服务器启动失败: ${error.message}`);
});    

二、静态资源服务器

const http = require("http");
const fs = require("fs").promises;
const path = require("path");
// 定义静态资源目录
const STATIC_DIR = path.join(__dirname, "static");
// 内容类型映射表
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 {
        // 构建文件路径
        let filePath = path.join(STATIC_DIR, req.url === "/" ? "index.html" : req.url);
        // 检查文件是否存在
        await fs.access(filePath);
        // 获取文件状态
        const stat = await fs.stat(filePath);
        if (stat.isDirectory()) {
            // 如果是目录,尝试默认文件
            filePath = path.join(filePath, "index.html");
            await fs.access(filePath);
        }
        // 获取文件扩展名并确定内容类型
        const extname = path.extname(filePath);
        const contentType = CONTENT_TYPES[extname] || "application/octet-stream";
        // 设置响应头并发送文件内容
        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("服务器监听在 http://localhost:3000");
});    

三、服务器获取get请求参数

在./static下面写一个index.html页面,页面中发送一个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和查询参数
    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请求参数
        res.end(`收到GET请求,参数:${JSON.stringify(query)}`);
    } else {
        res.statusCode = 404;
        res.end("404 - 页面未找到");
    }
});
app.listen(8888, () => {
    console.log("服务器已启动!地址为: http://localhost:8888");
});    

 四、服务器获取post请求参数

获取post请求的参数,通过给req绑定事件和end事件,来获取监听的参数,data事件一个接收的事件,end事件 当post请求的参数都接收完毕,就出发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 = "";
        // 监听data事件,收集数据块
        req.on("data", (chunk) => {
            body += chunk.toString();
        });
        // 监听end事件,数据接收完成
        req.on("end", () => {
            // 解析表单数据
            const formData = qs.parse(body);
            // 返回处理结果
            res.end(`收到POST请求,参数:${JSON.stringify(formData)}`);
        });
    } else {
        res.statusCode = 404;
        res.end("404 - 页面未找到");
    }
});
app.listen(8888, () => {
    console.log("服务器已启动!地址为: http://localhost:8888");
});    

每个步骤的代码都可以独立运行,并且包含了必要的注释以便理解

到此这篇关于搭建Node.js服务器的文章就介绍到这了,更多相关node.js服务器搭建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Node.js 实现简单爬虫的示例代码

    Node.js 实现简单爬虫的示例代码

    本文主要介绍了Node.js 实现简单爬虫,爬取美食网站的菜品标题和图片链接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • Windows系统下使用Sublime搭建nodejs环境

    Windows系统下使用Sublime搭建nodejs环境

    最近在研究Nodejs开发,俗话说,工欲善其事,必先利其器,当然要找到一款用着顺手的编辑器作为开始。这里我们选择的是Sublime Text 3,除了漂亮的用户界面,最吸引我的就是它的插件扩展功能以及跨平台特性。
    2015-04-04
  • 在Node.js中实现获取用户频道信息的功能

    在Node.js中实现获取用户频道信息的功能

    在构建社交或视频分享平台时,允许用户查看其他用户的频道信息是一个基本需求,本文将介绍如何在Node.js应用中,使用Express框架和Mongoose库来实现这一功能,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-04-04
  • node.js中的fs.fchmodSync方法使用说明

    node.js中的fs.fchmodSync方法使用说明

    这篇文章主要介绍了node.js中的fs.fchmodSync方法使用说明,本文介绍了fs.fchmodSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • pm2启动ssr失败的解决方法

    pm2启动ssr失败的解决方法

    这篇文章主要介绍了pm2启动ssr失败的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • 学习 NodeJS 第八天:Socket 通讯实例

    学习 NodeJS 第八天:Socket 通讯实例

    本篇文章主要介绍了学习 NodeJS 第八天:Socket 通讯实例,非常具有实用价值,需要的朋友可以参考下。
    2016-12-12
  • Node.js API详解之 console模块用法详解

    Node.js API详解之 console模块用法详解

    这篇文章主要介绍了Node.js API详解之 console模块用法,总结分析了Node.js API中console模块基本函数、使用方法与操作注意事项,需要的朋友可以参考下
    2020-05-05
  • Nest.js Controller路由和请求处理强大功能解析

    Nest.js Controller路由和请求处理强大功能解析

    这篇文章主要为大家,介绍了Nest.js Controller路由和请求处理强大功能解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Bun入门学习教程吊打Node或Deno的现代JS运行时

    Bun入门学习教程吊打Node或Deno的现代JS运行时

    这篇文章主要为大家介绍了一款吊打Node或Deno的现代JS运行时,Bun入门学习教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Node.js模块化原理与应用详细介绍

    Node.js模块化原理与应用详细介绍

    本篇文章我们将进入我们的模块化学习,node的模块化正是node的最大特点,能够帮住我们将繁琐的复杂代码变成一个个的小模块,便于引用
    2022-09-09

最新评论