2016-01-06 217 views
1

我是.Net開發人員和新的Node.js應用程序。我試圖通過Node.js爲我的ASP.NET MVC應用程序創建一個代理層,以執行跨域通信而不觸及我的ASP.NET WebAPI的服務器級配置。在ASP.NET MVC中使用node.js查看

讓我們從代碼開始迅速瞭解我的問題,

我創建了一個單一的MVC應用程序保存在「MyApp的/ app.js」和ASP.NET MVC觀點我節點,這將使一個AJAX調用我的節點文件。

<h2>This is an Index page</h2> 

<script> 
    $(function() { 
     $.ajax({ 
      url: "/sample", 
      success: function() { 
       alert('Done'); 
      } 
     }); 
    }); 
</script> 

下面是我的web.config,

<handlers>  
     <!-- indicates that the app.js file is a node.js application to be handled by the iisnode module --> 
     <add name="iisnode" path="MyApp/app.js" verb="*" modules="iisnode" />  
    </handlers> 

這裏是我的app.js,

var express = require('express'); 
var app = express(); 
app.set('port', process.env.PORT || 3000);//When I hardcode to Port:80 I'm getting "Error: listen EACCES 0.0.0.0:80" 

app.listen(app.get('port'), function() { 
    console.log('Express up and listening on port' + app.get('port')); 
}); 

app.get('/Sample', function (req, res) { 
    res.send('Hello World Sample!'); 
}); 

當我嘗試打開我的看法,AJAX調用與失敗「 404錯誤「。我試圖運行我的節點應用程序在端口:80,但它會引發錯誤「錯誤:聽EACCES 0.0.0.0:80」。爲什麼我不能在同一端口上運行我的Node應用程序和ASP.NET MVC視圖?

回答

2

不幸的是,無法在同一個端口上運行兩個應用程序。這就是運行Node應用程序時出現端口錯誤的原因。

是否有一個原因,你試圖在同一個應用程序中做到這一點?

你似乎在描述的是使用Node創建一個API並從ASP.NET MVC頂部的網站訪問它?

如果是這種情況,您需要在不同的IP地址或不同的服務器上運行它們以共享相同的端口 - 或者只是在不同的端口上運行它們。

+0

感謝您的答覆...但如果我使用不同IP /端口它會拋出跨域侵犯權利?我的意思是「沒有訪問控制允許orgin標題」。基本上我想創建一個代理層來擺脫跨域違規。 –

+0

@Karthick Jayaraman將此添加到您的代碼:res.header('Access-Control-Allow-Origin','*'); ('Access-Control-Allow-Methods','GET,PUT,POST,DELETE,OPTIONS'); ('Access-Control-Allow-Headers','Content-Type,Authorization,Content-Length,X-Requested-With'); – Zerubbabel

0

原因你的404錯誤是雙重的:

  1. 您需要添加您的處理程序definiton下方的重寫規則,使IIS將轉發所有來電到app.js

      <改寫>
        <規則>
          <規則名稱= 「appForward」 >
            <匹配URL = 「appjs/*」/ >
            <動作類型= 「重寫」 URL =「應用程序。JS」/>
          < /規則>
        < /規則>
      < /重寫>

  2. 你node.js的URL請求將包含所要求的完整路徑,但使用的路線對於匹配/示例將開始(根據上面的示例url重寫)/ appjs,或可能比這更多,例如/ iisAppName/appjs/sample。我知道restify可以匹配路由與正則表達式,如果expr ESS不會太大,那麼你會使用類似

    app.get({路徑:/.*/Sample$/,...