一个iisnode托管Web应用程序可以计算出在它被托管的虚拟路径?(Can an iisnode-

2019-06-24 07:59发布

我使用iisnode托管在Windows下的IIS节点的Web应用程序。 当我建立了我的路线在Web服务器上(比如快递或的RESTify)我想你做一个方式,是独立于IIS托管的应用程序的路径。

例如,我的应用程序可以在运行IIS两台机器两条不同的路径来主持; 第一个可以在承载它/foo ,而另一个在/bar 。 说我的应用程序要建立在路线/baz -第一台计算机上,我需要在配置路由/foo/baz和第二我将不得不使用/bar/baz这意味着复制一些挂起的配置在IIS。

是否可以可靠地与iisnode托管,这样我可以计算出正确的路线,建立一个应用程序内制定出的路径? 还是有另一种技术,我可以使用,以避免需要这样做呢?

Answer 1:

我不知道的方式,以避免看到对应于您在iisnode托管Node.js应用程式内虚拟目录的路径段。 以确保您的应用程序代码的最佳方式是主机无关的是在IIS网站的根主持它。



Answer 2:

@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中。



Answer 3:

这个答案意味着获得从路径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);
....
});


Answer 4:

有明示的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?