Temp O'rary
Temp O'rary

Reputation: 5826

Node.js on Windows Azure IIS using IISNode: How to set startup file?

I am using IISNode to server Node.js files over IIS on Windows Azure. But when I try to access the server path using http://127.0.0.1/mysite/node/ its throwing the following error

iisnode encountered an error when processing the request.

HRESULT: 0x2
HTTP status: 500
HTTP reason: Internal Server Error

And in the log file generated in iisnode folder it shows the following error:

Application has thrown an uncaught exception and is terminated:
Error: Cannot find module 'D:\Project\Files\mysite\node"'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:286:25)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (C:\Program Files\iisnode\interceptor.js:210:1)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:475:10)

But when I try this path http://127.0.0.1/mysite/node/app.js it executes the app.js file. However, I do not want to reveal the app.js file name in the URL. Can I set this file as the default file or startup file when I use this path http://127.0.0.1/mysite/node/?


UPDATE

Further to my answer below:

    <rule name="DynamicContent">
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
      </conditions>
      <action type="Rewrite" url="node/main.js"/>
    </rule>

This block of code in config is preventing calls to any .net files instead it is redirecting to node for execution. How can i redirect to node only when the URL contains /node/ at the end like http://127.0.0.1/mysite/node/?

Upvotes: 0

Views: 1355

Answers (2)

Gary Liu
Gary Liu

Reputation: 13918

We can leverage location element in web.config file as deciding that all files in a particular directory are supposed to be treated as node.js applications.

Here is my sites directory figure in iis:

enter image description here

And here is the content of web.config: <configuration> <location path="node"> <system.webServer> <handlers> <add name="iisnode" path="*.js" verb="*" modules="iisnode" /> </handlers>
</system.webServer> </location> </configuration>

And the URL likehttp://localhost /mysite/node will handled by iisnode as configured in web.config.

And the others will not be effected by iisnode, for example in this test, http://localhost /mysite/php/index.php still run PHP script.

For more infomation, we can see in Hosting node.js applications in IIS on Windows

Upvotes: 0

Temp O&#39;rary
Temp O&#39;rary

Reputation: 5826

I think this solution works.

Evaluating now...


UPDATE

    <rule name="DynamicContent">
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
      </conditions>
      <action type="Rewrite" url="node/main.js"/>
    </rule>

This block of code in config is preventing calls to any .net files and it is redirecting to node for execution.

How can i redirect to node only when the URL contains /node/ at the end like http://127.0.0.1/mysite/node/?

Upvotes: 1

Related Questions