Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了IIS,Node.js和具有IISNode的Web应用程序未配置虚拟目录大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在IIS中进行了以下设置:

>认网站(www.foo.com)托管标准的html网站
>运行IIS节点的认网站(www.foo.com/bar)下的Web应用程序
节点工程正在利用快递

我不能为了我的生活得到这个东西正确配置,所以当我打web应用程序是正确的节点应用程序.我认为我的问题在于web.config.任何人可以帮我写一个正确的web.config来使这个工作正常吗?我的配置的当前版本将为我服务一个节点响应,表示它无法获取任何url我键入的资源.

这是我的配置的当前版本:

<configuration>
  <system.webServer>    
    <handlers>
      <add name="iisnode" path="app.js" verb="*" modules="iisnode" />
    </handlers>    
    <rewrite>
      <rules>
        <rule name="bar">
          <match url="bar/*" />
          <action type="Rewrite" url="app.js" />
        </rule>
      </rules>
    </rewrite>    
  </system.webServer>
</configuration>

解决方法

我遇到同样的问题,在虚拟目录中运行我的应用程序.

经过大量的时间浪费和挣扎,我能把所有的东西放在一起,让我的应用程序在虚拟目录中工作,这包括使用Socket.io的应用程序

由于这个特定场景和可用资源没有太多的文档,我发现,仅部分描述了如何解决这个问题.这是一个关于如何让所有这些工作的教程.我个人有多个Node.js Web服务使用此设置实现REST API或Socket.io.

我强烈建议您使用下面的Web.config模板来获得此功能.

IIsnode Web.config模板

https://gist.github.com/pbaio/f63918181d8d7f8ee1d2

上述链接中的配置有一些我在那里的意见,以便于使用.它配置为使用app.js作为主文件,但如果您的文件被命名为不同的东西,只需切换该值即可使用该文件.

要让这个配置工作,你将需要URL Re-write Module for IIS,如果你还没有安装它.

认设置

认情况下,该模板设置为在IIS中运行的标准Web App中运行,而不是在虚拟目录环境中运行.但是,通过一些微小的调整,您可以使用相同的Web.config在虚拟目录中运行Node.js应用程序.

获取Express使用您的虚拟目录

IIsnode使您的< appSetTings>环境变量.我们可以利用这一点来设置我们的虚拟目录路径并将其公开到我们的主文件.在上面的模板中,我们的主文件是app.js.

获取我们的虚拟目录路径

我们需要从我们的Web.config文件获取@R_262_9616@程序路由的路径.我们通过访问我们的进程对象的环境变量来做到这一点.将以下行添加到我们的app.js文件中.

var virtualDirPath = process.env.virtualDirPath || '';

这将从我们的Web.config中检索我们的virtualDirPath,并给它一个空字符串的认值.

路由页面

然后我们可以将virtualDirPath添加到我们的路由中,如果您正在使用诸如Jade或EJS之类的视图引擎,我们可以将虚拟目录路径传递给超链接等视图:

var app = require('express')();
app.get(virtualDirPath + '/',function(req,res) {
  res.render('index',{ virtualDirPath: virtualDirPath });
});

静态内容

我们可以轻松地提供如下服务:

app.use(express.static(path.join(virtualDirPath,'public')));

同样的事情,如果你使用Bower.io:

app.use('/bower_components',express.static(path.join(virtualDirPath,'bower_components')));

使用虚拟目录与Express& Socket.io

当使用带有Socket.io的虚拟目录时,我们需要更改服务器和客户端的配置.

服务器端

我们需要配置我们的Socket.io服务器与您通常会略有不同.

var app = require('express')();

var virtualDirPath = process.env.virtualDirPath || '';

var server = require('http').Server(app);
var io = require('socket.io')(server,{ path: virtualDirPath + '/socket.io' });
// Get the port that we should be listening on
server.listen(process.env.PORT || 8080);

在上面的代码中,我们正在修改我们的Socket.io服务器以在我们的virtualDirpath上运行,而不是认路径(‘/socket.io’是认路径).

Web.config更改

为了使IIsnode正确使用socket.io,我们还需要添加一些额外的url重写和交换我们的处理程序.在上面的模板配置文件中,我们可以看到第57行的Socket.io处理程序,它在模板中被注释掉.

<add name="iisnode-socket.io" path="app.js" verb="*" modules="iisnode" />

那么我们需要为Socket.io路径添加我们的url重写

<rule name="SocketIO" patternSyntax="ECMAScript">
    <match url="socket.io.+" />
    <action type="Rewrite" url="app.js"/>
</rule>

客户端

在客户端,我们只需要指定Socket.io服务器正在侦听的路径,而不是其认路径.

var socket = io.connect('http://example.com:port',{ path: '/virtualDirPath/socket.io' });

一切都应该很好,在这一点上,您的Socket.io应用程序运行在具有IIsnode的虚拟目录中.

环境信息

使用此配置的应用程序使用Node.js Express 4.12.3构建,并在安装了IIsnode的IIS 7.5中运行.另外,通过更改conifg文件中的处理程序,也可以在虚拟目录中使用Socket.io.以上示例中使用的Socket.io版本为1.3.5

大佬总结

以上是大佬教程为你收集整理的IIS,Node.js和具有IISNode的Web应用程序未配置虚拟目录全部内容,希望文章能够帮你解决IIS,Node.js和具有IISNode的Web应用程序未配置虚拟目录所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。