2016-01-06 219 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$/,...