How to setup iisnode with express?

前端 未结 1 2004
误落风尘
误落风尘 2021-02-11 07:48

I recently started working on nodejs. I created a simple nodejs api (with express) which connect to SQL server database and return result. After my development I had challenge h

相关标签:
1条回答
  • 2021-02-11 08:38

    I recently started working on nodejs. I created a simple nodejs api (with express) which connect to SQL server database and return result. After my development I had challenge how to host this node js api. I decided to host my api on IIS. I got different errors and in the end I was able to make it work. Thanks to different articles on internet. Below are the steps I followed. May be this can help anyone who is new and trying to host nodejs in windows IIS.

    Step 1: Install IISnode. Make sure to select correct bit version as per your machine. I was using windows 10 64 bit. I installed iisnode-full-v0.2.21-x64.msi https://github.com/azure/iisnode/wiki/iisnode-releases

    Step 2: Install URL rewrite module https://www.iis.net/downloads/microsoft/url-rewrite

    Step 3: For my use I created a new website in IIS with name "Node Web Site". This site is running on port 90. Point this web site to physical path where your Nodejs api is available.

    Step 4: Provide node js api folder access to "IIS_IUSRS" group. You will get access error if don't provide access.

    Step 5: Add a web.config file in your node js api folder. Add below code in your config file. This will tell IIS that server.js will be handled by IISnode. Note: I have only one file in my project (server.js). If you have multiple files then you can add all those files here.

    <configuration><system.webServer><handlers><add name="iisnode" path="server.js" verb="*" modules="iisnode" /></handlers>    
      </system.webServer></configuration>

    Step 6: Add URL rewrite rule in your config file. This is required to make url user friendly. otherwise you need to provide .JS file path in the url. below is the final config file which I have in my application.

    <configuration>
      <system.webServer> 
    
        <handlers>
          <add name="iisnode" path="server.js" verb="*" modules="iisnode" />
        </handlers>
         <rewrite>
           <rules>
             <rule name="api">
               <match url="api/*" />
               <action type="Rewrite" url="server.js" />
             </rule>
           </rules>
         </rewrite>
    	 
    	  <security>
           <requestFiltering>
             <hiddenSegments>
               <add segment="node_modules" />
             </hiddenSegments>
           </requestFiltering>
         </security> 
      </system.webServer>
    </configuration>

    Before Rewrite section I was calling my application with url http://localhost/nodesample1/server.js

    After rewrite url can be like

    http://localhost/nodesample1/api

    Step 7: Now you need to make changes in get call of express. you need to provide full path in get call. for example before hosting application in IISNode my default get call code was like below snippet

    var express = require('express');
    var bodyParser = require('body-parser');
    var app = express();
    app.use(bodyParser());
    app.get('/', function (request, response) {  
        response.write('running');
        response.end();
    });

    But after IISNode hosting I had to change my get call like below

    var express = require('express');
    var bodyParser = require('body-parser');
    var app = express();
    app.use(bodyParser());
    app.get('nodesample1/api', function (request, response) {  
        response.write('running');
        response.end();
    });
    As I want me url to be like "http://localhost/nodesample1/api" I had to provide complete path in get call.

    That's it.

    This approach worked for me.

    0 讨论(0)
提交回复
热议问题