【问题标题】:Serve a specific url using express使用 express 提供特定的 url
【发布时间】:2016-03-16 06:49:38
【问题描述】:

有一个express 应用程序和两条路由,我如何在访问路由/bar 时为路由/foo 提供服务?

app.get("/foo", (req, res) => res.end("Hello World"));
app.get("/bar", (req, res) => /* ??? */);

我不想使用res.redirect("/foo") 进行重定向,因为这会改变网址。从我所看到的connect-middleware 可以完成这项工作,但它对我的需要来说太复杂了。

我只需将请求转发到/foo 路由,然后将其提供给/bar 路由下的客户端。

我该怎么做,例如当我在浏览器中打开/bar时,我会返回"Hello World"

我也不想要正则表达式解决方案。我想要这样的函数:res.serveUrl("/foo")

【问题讨论】:

    标签: node.js http express


    【解决方案1】:

    您也可以编写自己的“重写”引擎。在此示例中,您只需重写 URL 并使用 next() 来访问所需的处理程序:

    var express = require('express');
    var app = express();
    
    app.get('/foo', function (req, res, next) {
        req.url = '/bar';
        return next();
    });
    
    app.get('/bar', function (req, res) {
        console.dir(req.url);           // /bar
        console.dir(req.originalUrl);   // /foo
        console.dir(req.path);          // /bar
        console.dir(req.route.path);    // /bar
        res.send('Hello bar!');
    });
    
    app.listen(3000, function () {
      console.log('Example app listening on port 3000!');
    });
    

    您仍然可以使用req.originalUrl 访问原始网址

    其他人 (express-urlrewrite) 也已经想到了这样的中间件。

    【讨论】:

      【解决方案2】:

      您可以简单地创建处理函数并在两个路由中使用它

      function handleFooAndBar (req, res, next) {
          res.send('Hello World!');
      }
      
      app.get("/foo", handleFooAndBar); 
      app.get("/bar", handleFooAndBar);
      

      【讨论】:

      • 嗯,这又是另一种解决方案,但我真的很想在请求路线时提供另一条路线
      • 为另一条路线提供服务 是什么意思?我的解决方案将服务于“Hello World!”对于 /bar 和 /foo。这不是你想要的吗?
      • 我知道这会起作用,但我需要将请求转发到另一条路由并将响应发送到请求的路由,而不需要提供响应的函数引用。我需要serveReponse(req, res, "/my-url-to-be-served")之类的东西。
      • 该 URL 在 handleFooAndBar 中与 req.url 可用,因此它与您的 serveResponse 完全相同
      • 是的,但是假设在另一个文件中我有 app.get("/bar", ...) 并且在这里我想提供一个随机路由,而不需要对该函数的引用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 2017-10-20
      • 1970-01-01
      相关资源
      最近更新 更多