一个iisnode托pipe的Web应用程序可以找出它托pipe的虚拟path吗?

我正在使用iisnode在Windows上的IIS中托pipe节点Web应用程序。 当我在Web服务器(比如说Express或Restify)上设置我的路由时,我想以独立于IIS托pipe应用程序的path的方式来完成。

例如,我的应用程序可以托pipe在运行IIS的两台机器上的两个不同path上; 第一个可以在/foo托pipe,第二个在/bar 。 假设我的应用程序想要在/baz设置一个路由 – 在第一台机器上,我需要在/foo/bazconfiguration路由,然后在第二台机器上使用/bar/baz ,这意味着复制了一些configuration在IIS中。

是否有可能从iisnode托pipe的应用程序中可靠地找出path,以便我可以计算出正确的路由来设置? 还是有另一种技术可以用来避免这样做?

我不知道有一种方法可以避免在iisnode中托pipe的node.js应用程序中看到与虚拟目录对应的path段。 确保您的应用程序代码的最佳方法是与主机无关,即将其托pipe在IIS网站的根目录下。

@GraemeF:这是一个小黑客,但这是我得到这个限制。

首先,我在我的应用程序中添加了一个全局variableshome:

 var express = require('express'), app = express.createServer(), home = process.env.deployPath || ''; 

然后,我使用homevariables设置我的路线:

 app.get(home + '/baz', function(req, res) { res.send('This is the /baz route'); res.end(); }); 

然后,只需在应用程序web.config中设置deployPath appSetting即可:

机器1:

 <appSettings> <add key="deployPath" value="/foo" /> </appSettings> 

机器2:

 <appSettings> <add key="deployPath" value="/bar" /> </appSettings> 

您可以在每台机器上手动设置值,让您的构build过程设置值,甚至将设置添加到目标机器的全局web.config。

这个答案build议从web.config文件获取path。

另外, 这个链接也可能有一些帮助:

这个解决scheme被certificate是很好的,至less对于使用app.use()的“express”框架应用来说,

当你调用app.use(app.router)时,你可以为你的虚拟目录传递一个命名空间前缀,然后请求会成功,但是谁会想要将他们的虚拟目录名称硬编码到他们的应用中[yuck!]?

这个解决scheme很简单,因为IISNODE将appSettings提升为环境variables。 利用这个事实,您可以添加一个条目到应用程序web.config中,例如:

 <appSettings> <add key="appvirtdir" value="/nodetest" /> </appSettings> 

然后你可以像这样对你的server.js文件做一个简单的修改:

 app.configure(function () { .... app.use(process.env.appvirtdir || '', app.router); .... }); 

expression式和restify都允许用正则expression式来定义path。 通过使用正则expression式path可以完全避免前缀问题。

代替

 server.get({ path: '/virtual/directory/structure/status/',... 

使用

 server.get({ path: /.*\/status/,... 

而且不需要任何魔法。