3. 路由与中间件
在Express中,路由用于定义应用的各个端点(URI)及其处理程序。中间件是一个可以访问请求对象(req)、响应对象(res)和下一个中间件函数的函数。中间件用于处理请求之前执行一些操作,如验证、日志记录等。
路由
可以使用路由模块化API端点:
const express = require('express');
const router = express.Router();
const Item = require('./models/Item'); // 假设模型文件路径为models/Item.jsrouter.post('/items', async (req, res) => {// 创建资源代码
});router.get('/items', async (req, res) => {// 读取所有资源代码
});// 其他路由module.exports = router;
在主应用文件中使用路由:
const itemRoutes = require('./routes/items'); // 假设路由文件路径为routes/items.js
app.use('/api', itemRoutes);
中间件
定义一个简单的日志中间件:
const logger = (req, res, next) => {console.log(`${req.method} ${req.url}`);next();
};app.use(logger);
可以将中间件应用于特定的路由:
router.get('/items', logger, async (req, res) => {// 读取所有资源代码
});
4. 错误处理
在API开发中,错误处理非常重要。可以定义一个全局的错误处理中间件来处理所有未捕获的错误。
定义错误处理中间件
app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send({ error: 'Something went wrong', details: err.message });
});
在路由中传递错误
router.get('/items/:id', async (req, res, next) => {try {const item = await Item.findById(req.params.id);if (!item) {return res.status(404).send({ error: 'Item not found' });}res.send(item);} catch (error) {next(error);}
});
在本章中,我们介绍了如何使用Express开发RESTful API,包括基本的CRUD操作、路由与中间件的使用以及错误处理。通过学习这些内容,你应该能够:
- 定义和实现RESTful API的基本端点。
- 使用路由和中间件模块化和增强API功能。
- 处理API中的错误,提供友好的错误消息。
API开发是现代Web开发的核心技能之一,掌握这些技术能够让你开发出高效、可扩展的Web服务。