我在Win7盒子上本地在IIS 7上设置IISNode。我按照网站上的说明操作,样品工作正常。
我在IIS管理器中创建了一个新网站和AppPool,以运行Express网站的全新shell。我已经添加了web.config来将iisnode模块绑定到我的起始.js文件。
当我浏览到默认路由(/)时,我收到一个Http 403.14错误(服务器配置为不列出目录的内容)。
我试图将IISNode示例目录重新映射到我的Express应用程序所在的位置并发生同样的错误。
如果我尝试转到不存在的路线,我会收到Cannot VERB ROUTE
的Connect 404错误消息。
我觉得我错过了一些简单的东西(希望很明显)。
有没有人碰到这个并且可以为我提供一些见解?即使我可以检查,在网上看也没什么用。
答案 0 :(得分:5)
我弄清楚我遇到了什么问题。在我的web.config中,我有默认的IISNode部分和处理程序部分,用于将iisnode模块映射到我的app.js
文件。
但是,使用Express时,每条路径都必须通过该文件。因此,通过添加如下的重写部分,它解决了我的问题。
<rewrite>
<rules>
<rule name="Catch All">
<match url="/*" />
<action type="Rewrite" url="app.js" />
</rule>
</rules>
</rewrite>
答案 1 :(得分:3)
要获得更高级的URL重写配置,请查看http://tomasz.janczuk.org/2012/05/yaml-configuration-support-in-iisnode.html处的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>
上面的web.config具有以下效果:
答案 2 :(得分:1)
在我的link中查找更多信息我在问题的底部有一个工作示例
低于项目配置
在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>
的web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="server/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/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/server.js"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
app.js
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"
})
和main.html
<h1>this is a partial</h1>
<h2>{{myvar}}</h2>
和我的文件夹结构
但现在我无法在公共场所找到我的文件:(