当前位置: 首页 > 知识库问答 >
问题:

应用程序之间的差异。使用和应用程序。坐快车。js

毛峻
2023-03-14

我对表达和node.js有点陌生,我不知道app.use和app.get.之间的区别。似乎你可以用它们来发送信息。例如:

app.use('/',function(req, res,next) {
    res.send('Hello');
    next();
});

似乎与此相同:

app.get('/', function (req,res) {
   res.send('Hello');
});

共有3个答案

姬选
2023-03-14

简单的应用程序。使用表示“在所有请求上运行此应用程序”
。get表示“在给定URL的get请求上运行此操作”

仉俊能
2023-03-14

app。use是Connect的“低级”方法,Express所依赖的中间件框架。

以下是我的指导方针:

章阳波
2023-03-14

app。use()用于将中间件绑定到应用程序。路径是一个“装载”或“前缀”路径,它将中间件限制为仅应用于以它开头的任何请求路径。它甚至可以用于嵌入另一个应用程序:

// subapp.js
var express = require('express');
var app = modules.exports = express();
// ...
// server.js
var express = require('express');
var app = express();

app.use('/subapp', require('./subapp'));

// ...

通过将/指定为挂载路径,app.use()将响应以/开头的任何路径,这些路径都是所有路径,并且与使用的HTTP谓词无关:

  • GET/
  • 把 /foo
  • POST /foo/bar

app。另一方面,get()是Express应用程序路由的一部分,用于在使用getHTTP谓词请求时匹配和处理特定路由:

  • GET/

还有,您的应用程序示例的等效路由。use()实际上是:

app.all(/^\/.*/, function (req, res) {
    res.send('Hello');
});

(更新:试图更好地展示差异。)

路由方法,包括app。get(),是一种方便的方法,可以帮助您更精确地将响应与请求对齐。它们还增加了对参数和next('route')等功能的支持。

在每个应用程序中。get()是对应用程序的调用。使用()。直接使用()。但是,这样做通常需要(可能是不必要的)重新实现大量的样板代码。

示例:

>

  • 对于简单的静态路由:

    app.get('/', function (req, res) {
      // ...
    });
    

    vs.

    app.use('/', function (req, res, next) {
      if (req.method !== 'GET' || req.url !== '/')
        return next();
    
      // ...
    });
    

    对同一路由使用多个处理程序:

    app.get('/', authorize('ADMIN'), function (req, res) {
      // ...
    });
    

    vs.

    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;
      // ...
    });
    

    vs.

    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;
      // ...
    });
    

    注:Express“这些功能的实现包含在其路由器路由中。

  •  类似资料:
    • 我正在尝试为我在google app engine上开发的应用程序部署两个不同版本的api。 我对留档感到非常困惑;关于版本控制如何工作的解释或示例似乎没有太多的一致性。(或者至少在我看来)。 这个问题的特定主题是本文中的一段:https://cloud.google.com/appengine/docs/python/endpoints/test_deploy 当您部署后端API时,您将其部署到

    • 本文向大家介绍Java 应用程序与小程序之间有哪些差别?相关面试题,主要包含被问及Java 应用程序与小程序之间有哪些差别?时的应答技巧和注意事项,需要的朋友参考一下 简单说应用程序是从主线程启动(也就是 方法)。applet 小程序没有 方法,主要是嵌在浏览器页面上运行(调用或者来启动),嵌入浏览器这点跟 flash 的小游戏类似。

    • 我已经阅读了一些关于将Web应用和API应用部署到Azure的教程。然而,我仍然有点不确定为什么你会使用一个而不是另一个。 我可以创建一个新的。NET解决方案,并将其部署为Web应用程序,那么为什么我会特别需要API应用程序呢?这些都是专门为ASP优化的。NET Web API,其中Web应用程序用于交付HTML?

    • 问题内容: 我有2个应用程序,一个是用C编写的,另一个是用Java编写的,它们假定在同一台机器上运行。在它们之间实施IPC的最佳方法是什么? 最好的含义是可移植性,最小的用户意识(防火墙弹出窗口…)等。 问题答案: 我将使用Sockets over loop back开始。这样,您就可以发送文本或二进制数据,并在一个进程开始或结束时彻底处理。延迟大约为20-50微秒,具体取决于您对数据进行的处理以

    • 步骤 手动创建应用程序并添加了一些权限(application.readwrite.all、application.readwrite.ownedby、directory.readwrite.all、policy.readwrite.trustframework.trustframeworkkeyset.read.all、trustframeworkkeyset.readwrite.all、use

    • 我试图在应用程序中包含科尔多瓦插件快捷方式,但我无法构建应用程序。 下面是错误的截图 有没有其他等效的插件可以包含在应用程序中,也有没有任何插件可以在IOS中用于相同的要求。 在更新android SDK后,我仍然得到这个错误,我已经添加了错误的屏幕截图