app.use()用于将中间件绑定到您的应用程序。它
path是一个“
安装 ”或“ 前缀 ”路径,并限制中间件仅适用于以它 开头的 任何请求的路径。它甚至可以用于嵌入另一个应用程序:
// subapp.jsvar express = require('express');var app = modules.exports = express();// ...// server.jsvar express = require('express');var app = express();app.use('/subapp', require('./subapp'));// ...
通过指定
/为“ mount ”路径,
app.use()将响应以开头的所有路径,
/并且所有路径均与使用的HTTP动词无关:
GET /
PUT /foo
POST /foo/bar
- 等等
app.get()另一方面,它是Express的应用程序路由的一部分,用于与
GETHTTP动词一起请求时匹配和处理特定路由:
GET /
而且,您的示例的等效路由
app.use()实际上是:
app.all(/^/.*/, function (req, res) { res.send('Hello');});
( 更新:试图更好地证明差异。 )
包括在内的路由方法
app.get()是便利的方法,可帮助您更准确地将响应与请求对齐。它们还增加了对功能的支持,例如参数和
next('route')。
每个
app.get()调用中都有一个
app.use(),因此您当然可以
app.use()直接使用来完成所有这些 *** 作。但是,这样做通常需要(可能不必要)重新实现各种数量的样板代码。
例子:
- 对于简单的静态路由:
app.get('/', function (req, res) {
// …
});
与
app.use('/', function (req, res, next) { if (req.method !== 'GET' || req.url !== '/') return next(); // ...});
- 对于同一条路线有多个处理程序:
app.get('/', authorize('ADMIN'), function (req, res) {
// …
});
与
const authorizeAdmin = authorize('ADMIN');app.use('/', function (req, res, next) { if (req.method !== 'GET' || req.url !== '/') return next(); authorizeAdmin(req, res, function (err) { if (err) return next(err); // ... });});
- 带有参数:
app.get('/item/:id', function (req, res) {
let id = req.params.id;
// …
});
与
const pathToRegExp = require('path-to-regexp');function prepareParams(matches, pathKeys, previousParams) { var params = previousParams || {}; // TODO: support repeating keys... matches.slice(1).forEach(function (segment, index) { let { name } = pathKeys[index]; params[name] = segment; }); return params;}const itemIdKeys = [];const itemIdPattern = pathToRegExp('/item/:id', itemIdKeys);app.use('/', function (req, res, next) { if (req.method !== 'GET') return next(); var urlMatch = itemIdPattern.exec(req.url); if (!urlMatch) return next(); if (itemIdKeys && itemIdKeys.length) req.params = prepareParams(urlMatch, itemIdKeys, req.params); let id = req.params.id; // ...});
注:快车实现这些功能都包含在它的
Router,Layer和Route。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)