2013-12-06 3 views
0

Я установил IISNode на сервер и последовал за руководством, чтобы запустить приложение hello world node.js, работающее с ним. Он отлично работает, и он доступен через Интернет через Интернет. Однако, когда я пытаюсь включить мое существующее экспресс-приложение, это похоже на node/express, даже там.Не удается получить express.js, работающий с IISNode

Это мой файл web.config:

<configuration> 
<system.webServer> 

<handlers> 
<add name="iisnode" path="app.js" verb="*" modules="iisnode" /> 
</handlers> 

</system.webServer> 
</configuration> 

То есть в корневом каталоге приложения IIS, наряду с app.js, которая является моим основным файлом экспресса. Что интересно, если я иду на локальный/TestApp/app.js, я вернусь:

Cannot GET /TestApp/app.js 

Однако, если я попробовать другой файл, как локальный/TestApp/Public/HTM/index.htm, я получаю назад файл, который находится там (в HTML, как и ожидалось). Кроме того, если я попытаюсь выполнить вызов сервера (например, localhost/TestApp/GetUsernames).

Что еще более интересно то, что, если я испортить порт (например, app.listen (process.env.PORT2);), я получаю это когда я пытаюсь и LOCALHOST доступ/TestApp.js:

> iisnode encountered an error when processing the request. 
> 
> HRESULT: 0x2 HTTP status: 500 HTTP reason: Internal Server Error 

Если порт правильно (app.listen (process.env.PORT2);), я не могу получить /TestApp/app.js, так что это будет выглядеть как IISNode выполняет app.js (как еще если бы я испортил порт), но ничего не работает.

Как я могу исправить это или, по крайней мере, диагностировать проблемы?

спасибо.

ответ

2

Вы, вероятно, нужно добавить <rewrite> раздел для выяснения того, как маршрутизировать запросы:

<rewrite> 
     <rules> 
      <!-- Don't interfere with requests for node-inspector debugging --> 
      <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true"> 
       <match url="^server.js\/debug[\/]?" /> 
      </rule> 

      <!-- First we consider whether the incoming URL matches a physical file in the /public folder --> 
      <rule name="StaticContent"> 
       <action type="Rewrite" url="public{REQUEST_URI}" /> 
      </rule> 

      <!-- All other URLs are mapped to the Node.js application entry point --> 
      <rule name="DynamicContent"> 
       <conditions> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" /> 
       </conditions> 
       <action type="Rewrite" url="server.js" /> 
      </rule> 
     </rules> 
    </rewrite> 

Вытащил из примера Azure node.js приложения.

 Смежные вопросы

  • Нет связанных вопросов^_^