下面是关于 "Node.js 开发——Express 路由与中间件" 的完整攻略。
什么是 Express?
Express 是一个基于 Node.js 平台的 Web 应用开发框架,提供了一系列强大的特性,如路由控制、中间件、模板引擎等,可以让开发者高效地构建功能丰富、易于扩展的 Web 应用。
路由
在 Express 中,路由是指根据 HTTP 请求的路径和 HTTP 请求的方法来选择对应的处理函数的过程。
基本使用
在 Express 中,通过创建一个 Router
对象来实现路由的控制。下面是一个简单的示例:
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('Hello, world!');
});
module.exports = router;
在上面的代码中,首先通过 require
引入了 express
模块,并使用 express.Router()
创建了一个路由对象。接着,使用 router.get()
方法来定义一个 GET
请求的路由,当用户访问网站的根路径时,会返回字符串 'Hello, world!'
。
最后,通过 module.exports
导出该路由对象,以便在主模块或其他路由中使用。
动态路由
在 Express 中,可以通过 :
语法来实现动态路由。例如,定义一个参数名为 id
的动态路由:
router.get('/users/:id', (req, res) => {
res.send('User ID: ' + req.params.id);
});
在上述示例代码中,当用户访问 /users/123
路径时,会返回字符串 'User ID: 123'
。
路由分组
在实际开发中,我们通常会将路由按照功能分组,以便更好地管理和维护代码。在 Express 中,可以通过创建多个路由对象来实现路由分组。
例如,创建一个名为 users
的路由分组,并在其中定义若干个与用户相关的路由:
const userRouter = express.Router();
userRouter.get('/', (req, res) => {
res.send('User list');
});
userRouter.get('/:id', (req, res) => {
res.send('User ID: ' + req.params.id);
});
userRouter.post('/', (req, res) => {
res.send('Create user');
});
module.exports = userRouter;
在上述示例代码中,首先通过 express.Router()
创建了一个路由对象 userRouter
,然后在其中定义了三个路由,分别为获取用户列表、获取指定用户信息和创建新用户。
最后,通过 module.exports
导出该路由对象,以便在主应用程序或其他路由中使用。
示例
下面是使用路由实现一个简单的用户管理功能的基本示例:
// app.js
const express = require('express');
const app = express();
const port = 3000;
const userRouter = require('./userRouter');
app.use(express.json());
app.use('/users', userRouter);
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
// userRouter.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('User list');
});
router.get('/:id', (req, res) => {
res.send('User ID: ' + req.params.id);
});
router.post('/', (req, res) => {
const user = req.body;
// TODO: 保存用户信息
res.send('Create user: ' + user.name);
});
module.exports = router;
在上述示例代码中,首先在 app.js
中引入了 express
模块,创建了一个 Express 应用程序,然后在应用程序中使用了两个中间件:express.json()
和 userRouter
。
其中,express.json()
是一个内置的中间件,用于解析 HTTP 请求的 body 数据,将其转换成 JavaScript 对象,并挂载到 req.body
上。
userRouter
是一个自定义的路由对象,在 router.js
文件中定义了获取用户列表、获取指定用户信息和创建新用户三个路由。当用户请求 /users
路径时,会返回 'User list'
字符串;请求 /users/123
路径时,会返回 'User ID: 123'
字符串;请求 POST
方法提交用户信息时,会将用户信息保存到数据库,并返回 'Create user: ${user.name}'
字符串。
中间件
在 Express 中,中间件是指在处理 HTTP 请求的过程中,可以添加一些额外的处理逻辑的函数。
基本使用
在 Express 中,可以使用 app.use()
方法来添加中间件。例如:
app.use(dateMiddleware);
function dateMiddleware(req, res, next) {
req.date = new Date();
console.log('Date:', req.date);
next(); // 调用下一个中间件或路由处理函数
}
在上述示例代码中,定义了一个 dateMiddleware
中间件函数,用于在处理 HTTP 请求时记录当前时间并输出。当客户端发送 HTTP 请求时,该函数会被调用,并将当前时间保存到 req.date
属性上,并输出当前时间的值。最后,调用 next()
函数来执行下一个中间件或路由。
错误处理中间件
在 Express 中,可以通过捕获错误来进行错误处理。例如:
app.use((err, req, res, next) => {
console.log(err);
res.status(500).send('Something broke!');
});
在上述示例代码中,定义了一个错误处理中间件,当 HTTP 请求处理过程中发生错误时,该函数会被调用,其中 err
参数表示错误对象。该函数会输出错误对象的信息,并向客户端返回 500 状态码和一个简单的错误提示信息。
示例
下面是使用中间件实现一个简单的日志记录功能的基本示例:
// app.js
const express = require('express');
const app = express();
const port = 3000;
const loggerMiddleware = require('./loggerMiddleware');
app.use(loggerMiddleware);
app.get('/', (req, res) => {
res.send('Hello, world!');
});
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
// loggerMiddleware.js
function loggerMiddleware(req, res, next) {
console.log(`[${new Date()}] ${req.method} ${req.url}`);
next();
}
module.exports = loggerMiddleware;
在上述示例代码中,首先在 app.js
中引入了 express
模块,创建了一个 Express 应用程序,并使用 loggerMiddleware
中间件来记录 HTTP 请求的日志。其中,loggerMiddleware
在接收到 HTTP 请求时会输出请求的方法、路径和时间。最后,定义了一个根路由,返回字符串 'Hello, world!'
。
总结
通过这篇攻略,我们了解到了如何在 Express 中实现路由和中间件,以及如何结合现有的中间件和路由来开发功能丰富、易于维护的 Web 应用程序。
无论是开发基于 Node.js 的 Web 应用程序,还是学习 Express 框架,掌握路由和中间件的使用都是必不可少的一部分。希望本文能够对大家有所帮助,谢谢!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs开发——express路由与中间件 - Python技术站