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()创建服务器

✅ 理解 reqres对象

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

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

✅ 知道如何用 nodemon热重载

相关推荐
snakeshe10102 分钟前
SpringBoot 应用入门与 Docker 化部署实战
后端
mldlds14 分钟前
Spring Boot 集成 MyBatis 全面讲解
spring boot·后端·mybatis
We་ct18 分钟前
LeetCode 300. 最长递增子序列:两种解法从入门到优化
开发语言·前端·javascript·算法·leetcode·typescript
深海鱼在掘金18 分钟前
Next.js从入门到实战保姆级教程(第一章):导读——建立 Next.js 的认知框架
前端·typescript·next.js
渔舟小调20 分钟前
P17 | 管理台动态路由:后端返回菜单树,前端运行时注入
前端
小徐_233334 分钟前
uni-app 组件库 Wot UI 2.0 发布了,我们带来了这些改变!
前端·微信小程序·uni-app
❀͜͡傀儡师39 分钟前
Claude Code 官方弃用 npm 安装方式:原因分析与完整迁移指南
前端·npm·node.js·claude code
知识分享小能手1 小时前
ECharts入门学习教程,从入门到精通,ECharts高级功能(6)
前端·学习·echarts
阿祖zu1 小时前
OpenClaw 入门到放弃:私人 AI 的初代原型机
前端·后端·aigc
ZC跨境爬虫1 小时前
3D地球卫星轨道可视化平台开发 Day15(添加卫星系列模糊搜索功能)
前端·数据库·3d·交互·数据可视化