Node.js是一种基于Chrome V8引擎的开放源代码、跨平台的后端JavaScript运行环境。而Express是Node.js的一个简洁、灵活的Web应用架构,提供了一系列强大的特性。
在Express中,中间件是处理HTTP请求(如路由),以及HTTP响应的函数。通俗地说,就是在我们自己的代码实现前、后对请求进行的一些处理,它可以是一个或多个函数形成的一个处理流程,其中每个函数依次处理传递下来的请求和响应对象。它可以执行任何代码,写入或输出响应对象,以及对请求和响应对象进行修改等等。
在Express中,中间件可以分为四类:
- 应用级中间件:通过
app.use()
、app.get()
、app.post()
等方法来定义的中间件,它们绑定到应用程序对象上,用于日志记录、解析请求体、处理跨域请求等功能。
示例1:应用级日志中间件
const express = require('express');
const app = express();
// 定义日志中间件
const logger = (req, res, next) => {
console.log(`${new Date().toLocaleString()} - ${req.method} ${req.url}`);
next();
}
// 应用中间件
app.use(logger);
// 路由
app.get('/', (req, res) => {
res.send('Hello World!');
});
// 监听端口
app.listen(3000, () => {
console.log('Server is running at port 3000');
});
- 路由级中间件:通过
app.route()
、router.route()
等方式定义的中间件,用于检测特定路由请求,比如用户登录操作等。
示例2:路由级中间件
const express = require('express');
const app = express();
const router = express.Router();
// 定义路由级中间件
const auth = (req, res, next) => {
if (req.query.user === 'admin') {
console.log('Authorized user');
next();
} else {
console.log('Unauthorized user');
res.send('Unauthorized user');
}
}
// 路由
router.get('/', auth, (req, res) => {
res.send('Hello admin!');
});
// 注册路由
app.use('/admin', router);
// 监听端口
app.listen(3000, () => {
console.log('Server is running at port 3000');
});
- 错误处理中间件:用于处理应用中未能捕获的错误,一般在中间件链的最后被定义。
示例3:错误处理中间件
const express = require('express');
const app = express();
// 路由
app.get('/', (req, res) => {
throw new Error('oops!');
});
// 错误处理中间件
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something went wrong!');
});
// 监听端口
app.listen(3000, () => {
console.log('Server is running at port 3000');
});
- 内置中间件:是由Express封装好的,使用不需要引入额外模块的中间件。常用的有
express.json()
、express.urlencoded()
等,用于解析请求体。
以上是Express中间件的四种分类及示例,通过理解和使用它们,可以让我们更快速、高效地开发出高质量的Web应用程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs之Express中间件的分类介绍 - Python技术站