Router

路由器对象是中间件和路由的一个独立实例。可以将它视为一个“迷你应用程序”,仅能够执行中间件和路由功能。每个Express应用程序都有一个内置的应用程序路由器。

路由器的行为类似于中间件本身,因此可以将它用作app.use()的参数或另一个路由器的use()方法的参数。

顶级express对象有一个Router()方法,该方法创建一个新的Router对象。

一旦创建了路由器对象,就可以像app一样向其添加中间件和HTTP方法路由(如get、put、post等)。例如:

// invoked for any requests passed to this router
router.use(function (req, res, next) {
// .. some logic here .. like any other middleware
next()
}) // will handle any request that ends in /events
// depends on where the router is "use()'d"
router.get('/events', function (req, res, next) {
// ..
})

你可以为一个特定的根URL使用路由器。用这种方法将你的路由器分割到不同的文件或迷你小程序。

// only requests to /calendar/* will be sent to our "router"
app.use('/calendar', router)

Middleware

中间件功能可以访问请求和响应对象。它可以附加到请求-响应周期中的任何位置。中间件接收的第三个参数是下一个函数。当调用时,将执行链中的下一个中间件。中间件的一个示例是处理我们在上面编写的HTTP get请求的get回调。它是在特定情况下执行的非常特定的中间件。它们还可以执行更普通的任务。让我们创建一个非常简单的日志记录器中间件,它将记录发出的请求到控制台。

import express from "express";

function loggerMiddleware(request: express.Request, response: express.Response, next) {
console.log(`${request.method} ${request.path}`);
next();
} const app = express(); app.use(loggerMiddleware); app.get('/hello', (request, response) => {
response.send('Hello world!');
}); app.listen(3000);

通过使用app.use()和app.METHOD()函数,将应用程序级中间件绑定到app对象的实例,其中方法是中间件函数处理的请求的HTTP方法(如GET、PUT或POST),用小写字母表示。

此示例显示了一个没有挂载路径的中间件函数。该函数在应用程序每次收到请求时执行。

const app = express();

app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
});

此示例显示了挂载在/user/:id路径上的中间件功能。该函数针对/user/:id路径上的任何类型的HTTP请求执行。

app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method)
next()
})

最新文章

  1. 七个高效的文本编辑习惯(以Vim为例)
  2. 【niubi-job——一个分布式的任务调度框架】----niubi-job这下更牛逼了!
  3. windows下寻找端口
  4. android之相机开发
  5. hdu_5711_Ingress(TSP+贪心)
  6. guava-19.0和google-collections-1.0 的 ImmutableSet 类冲突
  7. Cassandra使用pycassa批量导入数据
  8. BZOJ_2734_[HNOI2012]集合选数_构造+状压DP
  9. 【转载】【吵架】能力 说清自己的能力。表达清楚 ;别人发飙你也要撕b;换位思考,把自己当领导层
  10. python模块之random
  11. 两个select之间的元素互相移动并保持顺序
  12. Visual Studio 2019及其注册码
  13. PAT 1057 数零壹
  14. WebView加载页面
  15. ORACLE异常处理及函数
  16. add_polygon_to_map
  17. 从简单类型到复杂类型的参数传递用例,以及传递简单string类型的解决办法
  18. Daily Scrum5 11.7
  19. BZOJ 3110 K大数查询 | 整体二分
  20. matlab转python

热门文章

  1. 重学数据结构(三)——使用单链表实现LRU淘汰缓存机制
  2. css中使用浮动的情况和清除浮动的方法
  3. Day15_用户注册
  4. 前端网(http://www.qdfuns.com/)不能访问了
  5. PDOStatement::nextRowset
  6. luogu P3279 [SCOI2013]密码
  7. Android JNI之编译
  8. 代码规范、API设计等规范
  9. HDU 6787 Chess 2020百度之星 初赛三 T5 题解 dp
  10. 移动物体监控系统-sprint2摄像头子系统开发