【问题标题】:Consume node.js in ASP.NET MVC View在 ASP.NET MVC 视图中使用 node.js
【发布时间】:2016-01-06 16:22:20
【问题描述】:

我是 .Net 开发人员,也是 Node.js 应用程序的新手。我试图通过 Node.js 为我的 ASP.NET MVC 应用程序创建一个代理层来进行跨域通信,而无需触及我的 ASP.NET WebAPI 的服务器级配置。

让我们从代码开始快速理解我的问题,

我创建了一个 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 中运行我的 Node 应用程序,但它抛出错误“错误:监听 EACCES 0.0.0.0:80”。为什么我不能在同一个端口上运行我的 Node 应用程序和 ASP.NET MVC 视图?

【问题讨论】:

    标签: c# asp.net asp.net-mvc node.js asp.net-mvc-4


    【解决方案1】:

    很遗憾,不能在同一个端口上运行两个应用程序。这就是您在运行 Node 应用程序时遇到端口错误的原因。

    您尝试在同一个应用程序中执行此操作是否有原因?

    您似乎在描述的是使用 Node 创建 API 并从基于 ASP.NET MVC 编写的网站访问该 API?

    如果是这种情况,您需要在不同的 IP 地址或不同的服务器上运行它们以共享相同的端口 - 或者只是在不同的端口上运行它们。

    【讨论】:

    • 感谢您的回复...但是如果我使用不同的 IP/端口,它会引发跨域冲突,对吗?我的意思是“无访问控制允许原始标头”。基本上我想创建一个代理层来摆脱跨域违规。
    • @Karthick Jayaraman 将此添加到您的代码中: res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
    【解决方案2】:

    您的 404 错误的原因有两个:

    1. 您需要在处理程序定义下添加重写规则,以便 IIS 将您的所有调用转发到 app.js

       





      规则>

    2. 您的 node.js 请求 url 将包含请求的完整路径,但用于匹配 /Sample 的路由将以 /appjs 开头(根据上面的示例 url 重写),或者可能更多,例如 /iisAppName/应用程序/示例 .我知道 restify 可以用正则表达式匹配路由,如果 express 也可以,那么你会使用类似

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-09
      • 2012-12-05
      • 2014-03-05
      • 2016-11-24
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多