Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js IISNode和Express 3产生http 403.13错误_Node.js_Express_Iisnode - Fatal编程技术网

Node.js IISNode和Express 3产生http 403.13错误

Node.js IISNode和Express 3产生http 403.13错误,node.js,express,iisnode,Node.js,Express,Iisnode,我正在Win7设备上本地设置IIS 7上的IISNode。我遵守了现场的指示,样品工作正常 我在IIS管理器中创建了一个新网站和应用程序池,以运行一个全新的Express网站外壳。我添加了web.config以将iisnode模块绑定到我的起始.js文件 当我浏览到默认路由(/)时,我得到一个Http 403.14错误(服务器配置为不列出目录的内容) 我试图将IISNode示例目录重新映射到我的Express应用所在的位置,但发生了相同的错误 如果我试图转到一个不存在的路由,我确实会收到Conn

我正在Win7设备上本地设置IIS 7上的IISNode。我遵守了现场的指示,样品工作正常

我在IIS管理器中创建了一个新网站和应用程序池,以运行一个全新的Express网站外壳。我添加了web.config以将iisnode模块绑定到我的起始.js文件

当我浏览到默认路由(/)时,我得到一个Http 403.14错误(服务器配置为不列出目录的内容)

我试图将IISNode示例目录重新映射到我的Express应用所在的位置,但发生了相同的错误

如果我试图转到一个不存在的路由,我确实会收到Connect的404错误消息
无法使用动词路由

我觉得我错过了一些简单而明显的东西


有没有人遇到过这个问题并能给我提供一些见解?即使在我可以检查的时候,通过在线查看也没有什么帮助。

我发现了我遇到的问题。在我的web.config中,我有默认的IISNode部分和处理程序部分来将IISNode模块映射到我的
app.js
文件

但是,当使用Express时,每条路由都必须通过该文件。因此,通过添加下面的“重写”部分,它解决了我的问题

<rewrite>
  <rules>
    <rule name="Catch All">
      <match url="/*" />
      <action type="Rewrite" url="app.js" />
    </rule>
  </rules>
</rewrite>

有关更高级的URL重写配置,请查看位于的web.config模板。此模板允许您将静态内容请求重定向到IIS静态文件处理程序,并通过HTTP保留对iisnode日志的访问权限

    <?xml version="1.0" encoding="utf-8"?>  
<configuration>  
    <system.webServer>           
      <handlers>  
           <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>  
     </handlers>  
      <rewrite>  
           <rules>  
                <rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">  
                     <match url="iisnode"/>  
                </rule>  
                <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">                      
                    <match url="^server.js\/debug[\/]?" />  
                </rule>  
                <rule name="StaticContent">  
                     <action type="Rewrite" url="public{{REQUEST_URI}}"/>  
                </rule>  
                <rule name="DynamicContent">  
                     <conditions>  
                          <add input="{{REQUEST_FILENAME}}" matchType="IsFile" negate="True"/>  
                     </conditions>  
                     <action type="Rewrite" url="server.js"/>  
                </rule>  
           </rules>  
      </rewrite>  
   </system.webServer>  
 </configuration>

,日志文件可在处访问
  • 它公开了位于的内置节点检查器调试器。了解有关使用iisnode进行调试的详细信息
  • 它发送所有其他HTTP请求,供server.js中的node.js应用程序处理
  • 在我的书里有更多的信息,在问题的底部有一个工作的例子

    下面是项目配置

    下面是server.js的代码

     "use strict";
    
     var express = require('express');
     // determind what mode we are
     var env = process.env.NODE_ENV = process.env.NODE_ENV||'developemnt';
     var app = express();
     //configure the view engine
    
     app.set('views', __dirname + '/views');
     app.engine('html', require('ejs').renderFile);
     app.set('view engine', 'html');
    
     //app.use('/public', express.static(__dirname + '../public'));
    
     //the asterisk handles all routes includes javascript, css, html request...
     app.get('*', function (req , res) {
            res.render('index');
     });
     var PORT = 3030;
     app.listen((process.env.PORT!==undefined)?process.env.PORT:PORT);
     console.log('Listening to PORT : ' + process.env.PORT );
    
    在index.html下面

    <!doctype html>
    <!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
    <!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
    <!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
    <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
      <head>
        <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
      <base href="/">
      <title></title>
      <meta name="description" content="">
      <meta name="viewport" content="width=device-width">
      </head>
      <body ng-app="idetikApp">
      <div ng-view=""></div>
        <script src="app/app.js"></script>
      </body>
    
    </html>
    
    还有main.html

    <h1>this is a partial</h1>
    <h2>{{myvar}}</h2>
    
    这是一个局部错误
    {{myvar}}
    
    和我的文件夹结构

    但现在我无法在public中找到我的文件:(


    我尝试了您的解决方案,但仍然出现此错误。有什么想法吗?
    angular.module('idetikApp', [ 'ngResource', 'ngRoute']);
    
    angular.module('idetikApp').config(function ($routerProvider, $locationProvider) {
      $locationProvider.html5Mode(true);
      $routerProvider.when('/', {templateUrl: '/partials/main', controller:'mainctrl'})
    
    });
    
    angular.module('idetikApp').controller('mainctrl', function ($scope) {
      $scope.mayvar = "hello world"
    })
    
    <h1>this is a partial</h1>
    <h2>{{myvar}}</h2>