Node.js入门教程 - 从零开始学习后端开发

luoxuancong2025-01-15nodeNode.js

node.js 学习开始

版本
node -v

V 12.16.1

  1. 在cmd 命令行输入 node 即进入node的交互环境。

node
在node环境中可以输入js代码并立马执行

node
Welcome to Node.js v12.16.1.  
Type ".help" for more information.  
100+200  
300

npm

WARNING

  1. npm 是NODE.js 的包管理工具(package manager)
  2. 大家可以将自己开发的模块打包上传到npm,需要时可以直接下载,开源共享。
  3. 重要的是,如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错

第一个node程序(hello Word)

  1. 新建一个js文件,命名hello.js,输入以下代码
console.log('hello word')
  1. 使用cmd命令cd 进入到当前js文件的目录,然后 输入 node hello.js,
C:\Users\Administrator>cd desktop
C:\Users\Administrator\Desktop>node hello.js
hello word

hello word 成功输入,说明程序运行成功!

注意

DANGER

一定要先进入当前js文件的目录,不然会报错


Express 框架入门

Express 是最流行的 Node.js Web 框架,用于构建 API 和 Web 应用。

安装 Express

# 创建项目目录
mkdir my-api
cd my-api

# 初始化 package.json
npm init -y

# 安装 Express
npm install express

第一个 Express 应用

创建 app.js 文件:

const express = require('express');
const app = express();
const port = 3000;

// 中间件:解析 JSON 请求体
app.use(express.json());

// 路由:首页
app.get('/', (req, res) => {
  res.send('Hello World!');
});

// 启动服务器
app.listen(port, () => {
  console.log(`服务器运行在 http://localhost:${port}`);
});

运行:

node app.js

RESTful API 开发

创建用户 API

const express = require('express');
const app = express();

app.use(express.json());

// 模拟数据库
let users = [
  { id: 1, name: '张三', email: 'zhangsan@example.com' },
  { id: 2, name: '李四', email: 'lisi@example.com' }
];

// GET - 获取所有用户
app.get('/api/users', (req, res) => {
  res.json({
    code: 200,
    data: users,
    message: '获取成功'
  });
});

// GET - 获取单个用户
app.get('/api/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) {
    return res.status(404).json({ code: 404, message: '用户不存在' });
  }
  res.json({ code: 200, data: user });
});

// POST - 创建用户
app.post('/api/users', (req, res) => {
  const { name, email } = req.body;
  if (!name || !email) {
    return res.status(400).json({ code: 400, message: '缺少必填字段' });
  }
  
  const newUser = {
    id: users.length + 1,
    name,
    email
  };
  users.push(newUser);
  
  res.status(201).json({ code: 201, data: newUser, message: '创建成功' });
});

// PUT - 更新用户
app.put('/api/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) {
    return res.status(404).json({ code: 404, message: '用户不存在' });
  }
  
  const { name, email } = req.body;
  if (name) user.name = name;
  if (email) user.email = email;
  
  res.json({ code: 200, data: user, message: '更新成功' });
});

// DELETE - 删除用户
app.delete('/api/users/:id', (req, res) => {
  const index = users.findIndex(u => u.id === parseInt(req.params.id));
  if (index === -1) {
    return res.status(404).json({ code: 404, message: '用户不存在' });
  }
  
  users.splice(index, 1);
  res.json({ code: 200, message: '删除成功' });
});

app.listen(3000, () => {
  console.log('API 服务器运行在 http://localhost:3000');
});

中间件使用

常用中间件

const express = require('express');
const cors = require('cors');  // 需要 npm install cors
const app = express();

// 解析 JSON 请求体
app.use(express.json());

// 解析 URL 编码的请求体
app.use(express.urlencoded({ extended: true }));

// 跨域支持
app.use(cors());

// 自定义日志中间件
app.use((req, res, next) => {
  console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);
  next();
});

// 错误处理中间件
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ code: 500, message: '服务器内部错误' });
});

连接 MySQL 数据库

安装 mysql2

npm install mysql2

数据库操作

const mysql = require('mysql2/promise');

// 创建连接池
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'your_password',
  database: 'test_db',
  waitForConnections: true,
  connectionLimit: 10
});

// 查询示例
async function getUsers() {
  try {
    const [rows] = await pool.execute('SELECT * FROM users');
    return rows;
  } catch (error) {
    console.error('查询失败:', error);
    throw error;
  }
}

// 在路由中使用
app.get('/api/users', async (req, res) => {
  try {
    const users = await getUsers();
    res.json({ code: 200, data: users });
  } catch (error) {
    res.status(500).json({ code: 500, message: '数据库查询失败' });
  }
});

项目结构建议

my-api/
├── app.js              # 入口文件
├── package.json
├── routes/             # 路由
│   ├── users.js
│   └── products.js
├── controllers/        # 控制器
│   ├── userController.js
│   └── productController.js
├── models/             # 数据模型
│   └── user.js
├── middleware/         # 中间件
│   ├── auth.js
│   └── logger.js
└── config/             # 配置文件
    └── database.js

常用命令

# 安装依赖
npm install

# 启动开发服务器(使用 nodemon 自动重启)
npm install -g nodemon
nodemon app.js

# 生产环境启动
NODE_ENV=production node app.js

推荐学习资源

如有问题,欢迎在评论区留言讨论!

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8