Node.js 第二课:用核心模块构建你的第一个服务器

创建并运行一个真正的Node.js服务器,理解HTTP模块,学会处理请求与响应。

实战项目:简易天气查询API

1. 创建项目结构

bash 复制代码
mkdir server-demo
cd server-demo
npm init -y
npm install nodemon --save-dev

修改 package.json:

json 复制代码
{
  "scripts": {
    "dev": "nodemon server.js"
  }
}

2. 核心模块讲解:http

创建 server.js:

javascript 复制代码
// 1. 导入内置的http模块
const http = require('http');

// 2. 创建服务器实例
const server = http.createServer((req, res) => {
  // req: 请求对象,包含客户端的信息
  // res: 响应对象,用于向客户端返回数据
  
  console.log(`收到 ${req.method} 请求,路径: ${req.url}`);
  
  // 设置响应头
  res.writeHead(200, { 
    'Content-Type': 'application/json',
    'Access-Control-Allow-Origin': '*'
  });
  
  // 根据请求路径返回不同响应
  if (req.url === '/weather/beijing') {
    res.end(JSON.stringify({
      city: "北京",
      temperature: "22°C",
      condition: "晴天"
    }));
  } else if (req.url === '/weather/shanghai') {
    res.end(JSON.stringify({
      city: "上海",
      temperature: "25°C",
      condition: "多云"
    }));
  } else {
    res.end(JSON.stringify({
      message: "欢迎使用天气API",
      endpoints: ["/weather/beijing", "/weather/shanghai"]
    }));
  }
});

// 3. 监听端口
const PORT = 3000;
server.listen(PORT, () => {
  console.log(`🚀 服务器运行在: http://localhost:${PORT}`);
  console.log(`📡 试试访问: http://localhost:${PORT}/weather/beijing`);
});

3. 运行并测试

bash 复制代码
npm run dev

用三种方式测试:

  1. 浏览器访问 :打开 http://localhost:3000

2 命令行curl:

bash 复制代码
curl http://localhost:3000/weather/shanghai
  1. 创建测试文件 test.js:
javascript 复制代码
const http = require('http');

const options = {
  hostname: 'localhost',
  port: 3000,
  path: '/weather/beijing',
  method: 'GET'
};

const req = http.request(options, (res) => {
  let data = '';
  
  res.on('data', chunk => {
    data += chunk;
  });
  
  res.on('end', () => {
    console.log('天气数据:', JSON.parse(data));
  });
});

req.end();

知识点总结

✅ 掌握 http.createServer()创建服务器

✅ 理解 req和 res对象

✅ 学会设置响应头和状态码

✅ 能根据不同URL返回不同内容

✅ 知道如何用 nodemon热重载

相关推荐
FungLeo6 小时前
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
前端·react.js·前端框架·项目复盘·成为全栈
EatFan6 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
Csvn7 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_7 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt7 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
波力海苔夹心脆6757 小时前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net
JavaGuide8 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel8 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘10 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm