五分钟帮助你快速入门 Express 后端开发

  • 本文旨在让你了解后端开发需要知道的必要的概念。

1. Node.js 基础

  • 什么是 Node.js?

    • Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,允许你在服务器端运行 JavaScript。
    • 它采用非阻塞 I/O 模型,特别适合高并发的网络应用。
  • 异步编程

    • 后端开发中,I/O 操作(如文件读取、数据库查询)通常很耗时。
    • Node.js 使用异步和事件驱动的方式处理这些操作,通过回调函数、Promises 或 async/await 来管理异步流程。

示例代码(回调函数)

const fs = require('fs');

fs.readFile('file.txt', (err, data) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log(data.toString());
});

2. Express 框架

  • 核心概念

    • Express 是一个轻量且灵活的 Node.js Web 应用框架。
    • 它简化了路由处理、中间件管理、HTTP 请求处理等任务。
  • 安装

    • 使用 npm 安装 Express:
      npm install express
      
  • 基本结构

    • 一个典型的 Express 应用包含以下模块:
      • app.js:应用的入口文件,用于初始化服务器和定义路由。
      • routes:存放处理 HTTP 请求的逻辑。
      • middlewares:实现请求预处理和后处理功能。
      • modelsdatabase:与数据库交互的部分。

3. Express 中间件

  • 定义

    • 中间件是 Express 中处理请求和响应的函数,可以在请求到达路由之前或响应返回之前执行。
    • 它们按顺序执行,可以修改请求和响应对象。
  • 内置中间件

    • express.json():解析 JSON 格式的请求体。
    • express.urlencoded():解析表单数据。
    • express.static():提供静态文件服务。

示例

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

// 使用中间件
app.use(express.json());
app.use(express.static('public'));

app.get('/', (req, res) => {
    res.send('Hello World!');
});

app.listen(3000, () => {
    console.log('Server running on port 3000');
});

4. API 路由

  • 路由定义

    • 路由用于将 HTTP 请求(GET、POST、PUT、DELETE 等)映射到相应的处理函数。
    • 示例:
      const express = require('express');
      const router = express.Router();
      
      // 定义 GET 请求
      router.get('/users', (req, res) => {
          res.json([{ id: 1, name: 'Alice' }]);
      });
      
      // 定义 POST 请求
      router.post('/users', (req, res) => {
          const newUser = req.body;
          // 保存到数据库
          res.status(201).json(newUser);
      });
      
      module.exports = router;
      
  • 参数和查询

    • 使用 :param 捕获动态路由参数。
    • 使用 req.query 获取 URL 查询参数。
    • 示例:
      // 获取 /users/123
      router.get('/users/:id', (req, res) => {
          const id = req.params.id;
          res.json({ id, name: 'Bob' });
      });
      

5. 数据库交互

  • MongoDB 示例

    • 使用 Mongoose 库连接 MongoDB 数据库。
    • 示例:
      const mongoose = require('mongoose');
      mongoose.connect('mongodb://localhost:27017/mydatabase', {
          useNewUrlParser: true,
          useUnifiedTopology: true
      });
      
      const userSchema = new mongoose.Schema({
          name: String,
          age: Number
      });
      const User = mongoose.model('User', userSchema);
      
      // 创建用户
      const createUser = async (user) => {
          const newUser = new User(user);
          await newUser.save();
      };
      
      // 查询用户
      const getUsers = async () => {
          const users = await User.find();
          return users;
      };
      
  • SQL 数据库(使用 MySQL 连接)

    • 示例:
      const mysql = require('mysql');
      
      const connection = mysql.createConnection({
          host: 'localhost',
          user: 'root',
          password: 'password',
          database: 'mydatabase'
      });
      
      connection.connect();
      
      const getUsers = (callback) => {
          connection.query('SELECT * FROM users', (error, results) => {
              if (error) throw error;
              callback(results);
          });
      };
      

6. 安全性

  • 防止 SQL 注入

    • 使用参数化查询或 ORM(如 Entity Framework)。
    • 对用户输入进行严格验证。
  • 密码安全

    • 使用哈希算法(如 bcrypt)存储密码。
    • 示例:
      const bcrypt = require('bcryptjs');
      
      const hashedPassword = await bcrypt.hash(password, 10);
      
  • CORS 防护

    • 使用 cors 中间件允许跨域请求。
    • 示例:
      const cors = require('cors');
      app.use(cors());
      

7. 调试与部署

  • POSTMAN

    • 使用 POSTMAN 测试 API,验证请求和响应。
  • 日志记录

    • 使用 morgan 中间件记录服务器请求日志。
    • 示例:
      const morgan = require('morgan');
      app.use(morgan('dev'));
      
  • 部署

    • 使用 Heroku、AWS、Vercel 或 Zeit 等平台部署应用。
    • 确保配置好环境变量和依赖。

8. 应用示例:待办事项管理 API

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

// 连接数据库
mongoose.connect('mongodb://localhost:27017/todoapp', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

// 定义待办事项模型
const Todo = mongoose.model('Todo', new mongoose.Schema({
    text: String,
    completed: Boolean
}));

// 中间件
app.use(express.json());

// 路由
app.get('/todos', async (req, res) => {
    const todos = await Todo.find();
    res.json(todos);
});

app.post('/todos', async (req, res) => {
    const todo = new Todo(req.body);
    await todo.save();
    res.status(201).json(todo);
});

// 启动服务器
app.listen(3000, () => {
    console.log('Server running on port 3000');
});

9. 扩展学习资源

希望这些内容能帮助你快速入门后端开发!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值