Node.js IISNode和Express 3产生http 403.13错误
我正在Win7设备上本地设置IIS 7上的IISNode。我遵守了现场的指示,样品工作正常 我在IIS管理器中创建了一个新网站和应用程序池,以运行一个全新的Express网站外壳。我添加了web.config以将iisnode模块绑定到我的起始.js文件 当我浏览到默认路由(/)时,我得到一个Http 403.14错误(服务器配置为不列出目录的内容) 我试图将IISNode示例目录重新映射到我的Express应用所在的位置,但发生了相同的错误 如果我试图转到一个不存在的路由,我确实会收到Connect的404错误消息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
无法使用动词路由
我觉得我错过了一些简单而明显的东西
有没有人遇到过这个问题并能给我提供一些见解?即使在我可以检查的时候,通过在线查看也没有什么帮助。我发现了我遇到的问题。在我的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>