我使用iisnode托管在Windows下的IIS节点的Web应用程序。 当我建立了我的路线在Web服务器上(比如快递或的RESTify)我想你做一个方式,是独立于IIS托管的应用程序的路径。
例如,我的应用程序可以在运行IIS两台机器两条不同的路径来主持; 第一个可以在承载它/foo
,而另一个在/bar
。 说我的应用程序要建立在路线/baz
-第一台计算机上,我需要在配置路由/foo/baz
和第二我将不得不使用/bar/baz
这意味着复制一些挂起的配置在IIS。
是否可以可靠地与iisnode托管,这样我可以计算出正确的路线,建立一个应用程序内制定出的路径? 还是有另一种技术,我可以使用,以避免需要这样做呢?
我不知道的方式,以避免看到对应于您在iisnode托管Node.js应用程式内虚拟目录的路径段。 以确保您的应用程序代码的最佳方式是主机无关的是在IIS网站的根主持它。
@GraemeF:这是一个有点哈克,但这是我绕过这个限制了谁。
首先,我加入到我的应用程序被称为家的全局变量:
var express = require('express'),
app = express.createServer(),
home = process.env.deployPath || '';
然后,我设置使用HOME变量我的路线:
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>
您可以手动设置每台机器上的价值,有您的构建过程中设置的值,甚至添加设置到目标机的全球web.config中。
这个答案意味着获得从路径web.config
文件。
此外, 这个环节可能是一些帮助,以及:
溶液变成出要很好的解决,至少使用app.use“表达”框架的应用程序()
当你调用app.use(app.router),你可以通过一个命名空间前缀为您的虚拟目录,然后请求将成功,但谁愿意硬编码的虚拟目录名称到他们的应用[呸!]?
该解决方案被证明是非常简单的,因为IISNODE促进的appSettings环境变量。 考虑到这一事实的优势,您可以添加到应用程序的web.config如一个条目:
<appSettings>
<add key="appvirtdir" value="/nodetest" />
</appSettings>
然后你就可以做一个简单的修改,你的文件server.js这样的:
app.configure(function () {
....
app.use(process.env.appvirtdir || '', app.router);
....
});
有明示的RESTify允许用正则表达式路径的定义。 通过使用正则表达式路径,你能避免前缀问题完全。
代替
server.get({ path: '/virtual/directory/structure/status/',...
使用
server.get({ path: /.*\/status/,...
而且会在不需要任何魔法。
文章来源: Can an iisnode-hosted web application work out the virtual path at which it is hosted?