5

我确信这个问题已经被问了一百万次,但我还没有找到任何解决以下问题的方法。

我有一个使用 nodejs 和 express 运行的基本应用程序。当我在节点中运行应用程序时,默认情况下它会将我发送到我的公用文件夹中的 index.html。即使我没有设置任何路线。我希望这发生。

我已经安装了 iisnode 并在“默认网站”下创建了一个名为“设备”的新应用程序。我把我的应用程序放在那里没有改变。阅读周围我需要用 web.config 整理一些东西,并决定使用这里提到的配置(不是 yaml):

http://tomasz.janczuk.org/2012/05/yaml-configuration-support-in-iisnode.html

当我尝试在浏览器中加载应用程序时,它总是会尝试在我的 app.js 中查找路由并向我抛出消息,例如:

无法获取 /devices/

我真的用这个把头发拉出来,不知道该怎么办!我是否必须在 app.js 入口点内为静态内容设置默认路由?我有以下内容:

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

但是当我从它的根目录加载应用程序时,它仍然没有把我交给 index.html:

'http://localhost/devices/'

有人能帮我解决这个问题吗?

4

2 回答 2

5

解决此问题的最简单方法是为您的应用程序创建一个专用的 IIS 网站,而不是像您那样在 IIS 网站中创建一个 IIS 应用程序。

如果您在 IIS 中有一个专门用于 node.js 应用程序的网站,则可以在 URL 空间的根目录访问该应用程序,例如http://myapp.com/,这是默认快速路由配置所期望的。相反,如果您在 IIS 网站中创建一个 IIS 应用程序来托管您的 node.js 应用程序(例如devices),则可以通过从属于网站根 URL 的 URL 访问它,例如http://myapp.com/devices/. 额外的 URL 路径段 ( devices) 是您的快速应用程序不期望的,并且未配置为处理,因此它拒绝请求。

如果您坚持将 node.js 应用程序作为 IIS 应用程序托管在 IIS 中,则需要增加您的快速路由配置,以期望与 IIS 应用程序名称匹配的额外 URL 路径段。

于 2012-09-18T16:41:04.777 回答
3

可以在以下位置找到一个很好的建议:iisnode 托管的 Web 应用程序可以计算出它托管的虚拟路径吗?本质上,您使用一个小变量来抽象路径和一个环境变量(如果存在)来控制它。另一个好帖子(可能更好的解决方案)可以在https://github.com/tjanczuk/iisnode/issues/160找到

于 2013-11-01T22:46:49.273 回答