全栈开发技术学习文档

一、后端开发简介

后端开发涉及构建服务器端逻辑和数据库交互,主要负责数据处理、身份验证、业务逻辑实现等功能。随着 Web 技术的发展,后端开发使用多种语言和框架,其中 Node.jsExpress 是当前非常流行的技术栈,它们结合了 JavaScript 和高效的服务器端开发能力。此外,后端开发还包括设计和实现数据库的操作,了解 SQL 和 NoSQL 数据库是基础技能。

二、Node.js 基础

1. 什么是 Node.js?

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,使得开发者能够使用 JavaScript 编写后端代码。与传统的 Web 开发不同,Node.js 是异步、事件驱动的模型,适合处理高并发的应用程序。

2. 创建简单的 HTTP 服务器

在 Node.js 中,我们可以使用内置的 http 模块快速创建一个简单的 HTTP 服务器:

http = require('http'); const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello, Node.js!'); }); server.listen(3000, '127.0.0.1', () => { console.log('Server running at http://127.0.0.1:3000/'); });

3. 路由与请求处理

在 Node.js 中,手动处理路由和请求可能会变得复杂,因此我们通常使用 Web 框架如 Express 来简化这一过程。

三、Express 框架

1. 什么是 Express?

Express 是一个基于 Node.js 的 Web 应用框架,它提供了一些简化开发的功能,如路由、请求处理、静态文件服务等。它大大提高了开发效率,使得编写后端代码更加简洁、直观。

2. 安装与设置

要使用 Express,首先需要安装 Node.js 和 npm,然后创建项目并安装 Express:

npm init -y npm install express

3. 创建一个简单的 Express 应用

const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello, Express!'); }); app.listen(3000, () => { console.log('Server running at http://127.0.0.1:3000/'); });

4. 路由与请求处理

Express 提供了多种 HTTP 请求方法,如 app.get(), app.post(), app.put(), app.delete() 等,用来处理不同的 HTTP 请求。

app.post('/submit', (req, res) => { res.send('Form submitted!'); });

5. 中间件

中间件是指在请求-响应周期中,位于请求和响应之间的函数。它们可以用于处理请求数据、认证、日志等。

app.use((req, res, next) => { console.log('A request was made!'); next(); });

四、RESTful API 设计

1. 什么是 RESTful API?

REST(Representational State Transfer)是一种通过 HTTP 协议设计和使用 Web 服务的架构风格。RESTful API 是一种符合 REST 原则的 API,其设计方式简洁、标准化,通常通过 HTTP 的四种常见方法(GET, POST, PUT, DELETE)来操作资源。

2. RESTful 路由设计

RESTful API 设计中,URL 通常映射到资源,HTTP 方法定义了对资源的操作。

  • GET:获取资源。
  • POST:创建新资源。
  • PUT:更新资源。
  • DELETE:删除资源。

例如,假设我们有一个关于 "用户" 的 API:

// 获取所有用户app.get('/users', (req, res) => { // 返回所有用户数据}); // 创建用户app.post('/users', (req, res) => { // 创建新用户}); // 获取单个用户app.get('/users/:id', (req, res) => { // 返回指定 id 的用户数据}); // 更新用户app.put('/users/:id', (req, res) => { // 更新指定 id 的用户数据}); // 删除用户app.delete('/users/:id', (req, res) => { // 删除指定 id 的用户});

五、数据库基础

数据库是后端开发的核心部分,负责持久化存储和管理数据。根据数据模型,数据库主要分为两类:关系型数据库(SQL)和非关系型数据库(NoSQL)。

1. SQL 数据库

SQL(Structured Query Language)是关系型数据库的查询语言,常见的数据库有 MySQL 和 PostgreSQL。

常见 SQL 操作

  • SELECT:查询数据
  • INSERT:插入数据
  • UPDATE:更新数据
  • DELETE:删除数据

例如,在 MySQL 中,创建一个 users 表并进行操作:

CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), age INT); -- 插入数据INSERT INTO users (name, age) VALUES ('Alice', 30); -- 查询数据SELECT * FROM users; -- 更新数据UPDATE users SET age = 31 WHERE name = 'Alice'; -- 删除数据DELETE FROM users WHERE name = 'Alice';

2. NoSQL 数据库

NoSQL 数据库用于处理非结构化数据或大规模数据,常见的有 MongoDB 等。

MongoDB 示例

MongoDB 是一个文档型数据库,数据以 JSON 格式存储,可以方便地进行快速查询和数据插入。

  • 安装 MongoDB
  • npm install 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 user = new User({ name: 'Alice', age: 30 }); user.save(); // 查询用户User.find({ name: 'Alice' }).then(users => { console.log(users); });

3. ORM(对象关系映射)

ORM 是一种将对象和关系数据库之间进行映射的技术,使得开发者能够使用对象化的方式操作数据库,减少直接编写 SQL 语句的需求。

  • Sequelize(用于 SQL 数据库,如 MySQL 和 PostgreSQL)
  • Mongoose(用于 MongoDB)

例如,使用 Sequelize:

const { Sequelize, DataTypes } = require('sequelize'); const sequelize = new Sequelize('mysql://user:password@localhost:3306/mydatabase'); const User = sequelize.define('User', { name: DataTypes.STRING, age: DataTypes.INTEGER}); // 创建用户User.create({ name: 'Alice', age: 30 });

六、面试题

1. Node.js 面试题

  • 什么是事件循环?
    事件循环是 Node.js 用来处理异步操作的机制,允许非阻塞 I/O 操作在执行的同时,不会阻塞其他代码的执行。
  • Node.js 中的异步与同步有什么区别?
    同步操作会阻塞后续代码的执行,直到当前操作完成;异步操作则不会阻塞执行,它们通常通过回调函数或 Promise 来处理结果。

2. Express 面试题

  • 中间件的作用是什么?
    中间件是 Express 请求-响应周期中的函数,它可以访问请求对象、响应对象和下一个中间件函数。它通常用于处理请求数据、日志记录、身份验证等。
  • 如何处理 POST 请求的表单数据?
    使用 express.urlencoded()express.json() 中间件解析请求体中的数据。

3. 数据库面试题

  • 什么是关系型数据库与非关系型数据库的区别?
    关系型数据库(如 MySQL)使用表格存储数据,并通过 SQL 查询语言进行管理,而非关系型数据库(如 MongoDB)使用灵活的存储方式,如文档、键值对等,通常适用于大规模、高并发的应用场景。
  • ORM 和 SQL 查询的区别是什么?
    ORM 是对象关系映射,允许开发者通过对象化的方式进行数据库操作,而 SQL 查询是直接写 SQL 语句与数据库进行交互。

七、总结

后端开发是构建 Web 应用程序的核心,涉及从服务器端到数据库的各种操作。通过学习 Node.js 和 Express,开发者可以使用 JavaScript 编写后端代码,快速搭建 Web 应用;而掌握 SQL 和 NoSQL 数据库的基本操作,则是后端开发的重要基础。ORM 技术能够使数据库操作更加简便和直观,减少 SQL 语句的编写

4o mini