一个iisnode托pipe的Web应用程序可以找出它托pipe的虚拟path吗?
我正在使用iisnode在Windows上的IIS中托pipe节点Web应用程序。 当我在Web服务器(比如说Express或Restify)上设置我的路由时,我想以独立于IIS托pipe应用程序的path的方式来完成。
例如,我的应用程序可以托pipe在运行IIS的两台机器上的两个不同path上; 第一个可以在/foo
托pipe,第二个在/bar
。 假设我的应用程序想要在/baz
设置一个路由 – 在第一台机器上,我需要在/foo/baz
configuration路由,然后在第二台机器上使用/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/,...
而且不需要任何魔法。