为什么我要为我的所有路由处理程序添加前缀

时间:2012-02-27 12:41:21

标签: node.js express iisnode

我正在 IISNode 下的节点上运行 Expressjs 创建应用程序(即在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或其他我未配置的东西有关吗?

3 个答案:

答案 0 :(得分:6)

我一直在寻找这个功能,但是对于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'

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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