【问题标题】:Why do I to have prefix all my route handlers为什么我要为所有路由处理程序添加前缀
【发布时间】:2012-02-27 12:41:21
【问题描述】:

我正在使用 Expressjs 创建一个应用程序,该应用程序在 IISNode 下的 node 上运行(即在 Windows 上)。

我首先像我见过的所有 expressjs 示例一样进行设置:

  backend.configure(function() {
    backend.register('html', {
      compile: function(str, options) {
        return function(locals) {
          return str;
        };
      }
    });
    backend.set('views', __dirname + '/views');
    backend.set('view engine', 'html');
    backend.set('view options', {
      layout: false
    });
    backend.use(express.bodyParser());
    backend.use(backend.router);
    backend.use(express.static(__dirname + '/public'));
  });  

假设我的站点在 localhost://mysite 运行。我必须按如下方式创建所有路由处理程序。

  backend.get('/mysite/index', function(req, res, next) {
    return res.render('index');
  });

即我必须在它们前面加上“mysite”。我见过的例子都不需要这个。这与 IISNode 或其他我没有配置的东西有关吗?

【问题讨论】:

    标签: node.js express iisnode


    【解决方案1】:

    我一直在寻找此功能,但寻找的是 API 路由,而不是静态文件。我所做的是,当我初始化路由器时,我添加了挂载路径。所以我的配置是这样的

    //Default configuration
    app.configure(function(){
        app.use(express.compress());
        app.use(express.logger('dev'));
        app.set('json spaces',0);
        app.use(express.limit('2mb'));
        app.use(express.bodyParser());
    
        app.use('/api', app.router);        // <---
    
        app.use(function(err, req, res, callback){
            res.json(err.code, {});
        });
    });
    

    调用路由器时注意'/api'

    【讨论】:

    • 值得注意的是,此解决方案可与 express-resouce 顺利配合。我有几个快速子应用程序,它们使用此解决方案在前缀 /api 下方提供 API,并在 /. 处提供常规网站
    【解决方案2】:

    开箱即用,这确实是您必须这样做的方式。您可以查看 express-resource,启用资源丰富的路由 - 但这有它自己的警告,至少在路由特定的中间件方面是这样。

    如果只是一条路径,我认为您可以使用 app.set("basepath", "mysite") 处理。

    【讨论】:

    • 感谢 Linus,我对 app.set("basepath", "mysite") 没有任何运气。我查看了 express-resource,但也找到了相关的 question。最后我选择了express-namespace。它有an issue in windows,但很容易通过修改 express-namespace node_modules 文件夹中的 index.js 文件来修复。
    【解决方案3】:

    为避免在使用 iisnode 在 IIS 中部署时修改您的 express 应用程序,您需要部署到 IIS 网站的根目录,而不是站点下的虚拟目录。

    【讨论】:

    • 我很震惊有多少人认为建议对整个应用程序结构进行不必要的更改是解决此问题的方法。这是“无法做到”的最糟糕的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2011-10-14
    • 2018-04-14
    • 1970-01-01
    • 2015-12-06
    • 2017-12-28
    相关资源
    最近更新 更多