栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

express.js中app.use和app.get之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

express.js中app.use和app.get之间的区别

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的应用程序路由的一部分,用于与
GET
HTTP动词一起请求时匹配和处理特定路由:

  • 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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417863.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号