Typescript node starter 2.Router Middleware
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()
})