- 本文旨在让你了解后端开发需要知道的必要的概念。
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
- 使用 npm 安装 Express:
-
基本结构
- 一个典型的 Express 应用包含以下模块:
app.js
:应用的入口文件,用于初始化服务器和定义路由。routes
:存放处理 HTTP 请求的逻辑。middlewares
:实现请求预处理和后处理功能。models
或database
:与数据库交互的部分。
- 一个典型的 Express 应用包含以下模块:
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. 扩展学习资源
- 官方文档:
- 教程:
- 实践项目:
- 构建 RESTful API
- 实现用户认证系统
- 集成第三方服务(如支付、邮件)
希望这些内容能帮助你快速入门后端开发!