asp.net - deploy - Cómo obtener los archivos angular.js en IIS 7.5 para implementación de pila completa angular
publish angular 2 app iis (1)
--ACTUALIZAR
ahora obtengo este error pero la reescritura parece que está funcionando pero lee archivos js como html o algún tipo de problema como este
Quiero crear las reglas correctas de re-escritura para web.config en IIS 7.5 para implementación de aplicaciones de pila completa angular
Este es mi WEB.CONFIG estoy usando este pero no puedo configurar el camino virtual
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
</handlers>
<iisnode node_env="PRODUCTION"
nodeProcessCountPerApplication="1"
maxConcurrentRequestsPerProcess="1024"
maxNamedPipeConnectionRetry="100"
namedPipeConnectionRetryDelay="250"
maxNamedPipeConnectionPoolSize="512"
maxNamedPipePooledConnectionAge="30000"
asyncCompletionThreadCount="0"
initialRequestBufferSize="4096"
maxRequestBufferSize="65536"
uncFileChangesPollingInterval="5000"
gracefulShutdownTimeout="60000"
loggingEnabled="true"
logDirectory="iisnode"
debuggingEnabled="true"
debugHeaderEnabled="false"
debuggerPortRange="5058-6058"
debuggerPathSegment="debug"
maxLogFileSizeInKB="128"
maxTotalLogFileSizeInKB="1024"
maxLogFiles="20"
devErrorsEnabled="true"
flushResponse="false"
enableXFF="false"
promoteServerVars=""
configOverrides="iisnode.yml"
watchedFiles="web.config;*.js" />
<rewrite>
<rules>
<!-- Don''t interfere with requests for node-inspector debugging -->
<rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^server.js//debug[//]?"/>
</rule>
<!-- serve static files from /public folder -->
<rule name="StaticContent">
<action type="Rewrite" url="public/{R:0}" logRewrittenUrl="true"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
</conditions>
<match url="public/*"/>
</rule>
<!-- All other URLs are mapped to the Node.js application entry point -->
<rule name="DynamicContent">
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
</conditions>
<action type="Rewrite" url="server.js"/>
</rule>
<rule name="SocketIO" patternSyntax="ECMAScript">
<match url="socket.io.+"/>
<action type="Rewrite" url="server.js"/>
</rule>
</rules>
</rewrite>
<!-- <appSettings>
<add key="virtualDirPath" value="/idetikmssql"/>
</appSettings> -->
</system.webServer>
ESTE ES MI server.js
"use strict";
var express = require(''express''),
stylus = require(''stylus''),
logger = require(''morgan''),
bodyParser = require(''body-parser'');
// determind what mode we are
var env = process.env.NODE_ENV = process.env.NODE_ENV||''developemnt'';
var virtualDirPath = process.env.virtualDirPath || '''';
var app = express();
//configure the view engine
function compile(str, path) {
return stylus(str).set(''filename'', path);
}
app.set(''views'', __dirname + ''/server/views/'');
app.engine(''html'', require(''ejs'').renderFile);
app.set(''view engine'', ''html'');
app.use(stylus.middleware(
{
src: __dirname + ''public'',
compile: compile
}
));
app.use(bodyParser());
var appPath = app.get(''appPath'')
app.use(''/bower_components'', express.static(appPath + "/bower_components/"));
app.use(''/app/'', express.static(appPath + "/app/"));
app.use(''/assets'', express.static(appPath + "/assets/"));
app.use(express.static(__dirname + ''/public''));
app.get(''/partials/:partialsPath'', function (req, res) {
debugger;
res.render(''partials/'' + req.params.partialsPath);
});
//the asterisk handles all routes includes javascript, css, html request...
app.get(''*'', function (req , res) {
res.render(''index'');
});
// app.get(virtualDirPath + ''/'', function(req, res) {
// res.render(''index'', { virtualDirPath: virtualDirPath });
// })
var PORT = 3030;
app.listen((process.env.PORT!==undefined)?process.env.PORT:PORT);
console.log(''Listening to PORT : '' + process.env.PORT );
console.log(__dirname);
ESTE ES MI ÍNDICE.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>
</body>
<script type="text/javascript" src="app/app.js"></script>
<script type="text/javascript" src="bower_components/angular/angular.js"></script>
<script type="text/javascript" src="bower_components/angular-route/angular-route.js"></script>
<script type="text/javascript" src="bower_components/angular-resource/angular-resource.js"></script>
</html>
Agrego mi estructura de archivos dentro de IIS
- UNA DE MIS SOLUCIONES
Intenté instalar una aplicación express desde cero y funciona. Todo lo que tengo que hacer es cambiar el número de puerto para process.env.PORT y su ejecución, pero la pila completa aún no puede hacer que funcione. Todavía necesito ayuda.
AQUÍ MI APLICACIÓN FUNCIONA BIEN EN IIS
OK Gente después de una semana de excavar, finalmente lo hice funcionar; la siguiente es la configuración correcta para IIS 7.5. Recuerde que su carpeta / parciales debe estar en la carpeta cliente / pública para que el enrutamiento exprés funcione correctamente.
Aquí hay un enlace al PROYECTO GIT-HUB
enlace: https://github.com/cesarvega/MEAN-IIS7.5-Stack
Aquí está mi web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
</handlers>
<iisnode node_env="PRODUCTION"
nodeProcessCountPerApplication="1"
maxConcurrentRequestsPerProcess="1024"
maxNamedPipeConnectionRetry="100"
namedPipeConnectionRetryDelay="250"
maxNamedPipeConnectionPoolSize="512"
maxNamedPipePooledConnectionAge="30000"
asyncCompletionThreadCount="0"
initialRequestBufferSize="4096"
maxRequestBufferSize="65536"
uncFileChangesPollingInterval="5000"
gracefulShutdownTimeout="60000"
loggingEnabled="true"
logDirectory="iisnode"
debuggingEnabled="true"
debugHeaderEnabled="false"
debuggerPortRange="5058-6058"
debuggerPathSegment="debug"
maxLogFileSizeInKB="128"
maxTotalLogFileSizeInKB="1024"
maxLogFiles="20"
devErrorsEnabled="true"
flushResponse="false"
enableXFF="false"
promoteServerVars=""
configOverrides="iisnode.yml"
watchedFiles="web.config;*.js" />
<rewrite>
<rules>
<!-- Don''t interfere with requests for node-inspector debugging -->
<rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^server.js//debug[//]?"/>
</rule>
<!-- serve static files from /public folder -->
<rule name="StaticContent">
<action type="Rewrite" url="public/{R:0}" logRewrittenUrl="true"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
</conditions>
<match url=".*" />
</rule>
<rule name="DynamicContent">
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
</conditions>
<action type="Rewrite" url="server.js"/>
</rule>
<rule name="SocketIO" patternSyntax="ECMAScript">
<match url="socket.io.+"/>
<action type="Rewrite" url="server.js"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
El archivo Server.js
"use strict";
var express = require(''express''),
stylus = require(''stylus''),
logger = require(''morgan''),
bodyParser = require(''body-parser'');
var env = process.env.NODE_ENV = process.env.NODE_ENV||''developemnt'';
var app = express();
//configure the view engine
function compile(str, path) {
return stylus(str).set(''filename'', path);
}
app.set(''views'', __dirname + ''/server/views/'');
app.engine(''html'', require(''ejs'').renderFile);
app.set(''view engine'', ''html'');
app.use(stylus.middleware(
{
src: __dirname + ''public'',
compile: compile
}
));
app.use(bodyParser());
app.use(express.static(__dirname + ''/public''));
app.get(''/partials/:partialsPath'', function (req, res) {
res.render(''/node/idetikmssql/partials/'' + req.params.partialsPath);
});
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 );
console.log(__dirname);
El 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="/node/idetikmssql/"> -->
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width">
</head>
<body ng-app="idetikApp">
<div ng-view=""></div>
</body>
<script type="text/javascript" src="bower_components/angular/angular.js"></script>
<script type="text/javascript" src="bower_components/angular-route/angular-route.js"></script>
<script type="text/javascript" src="bower_components/angular-resource/angular-resource.js"></script>
<script type="text/javascript" src="app/app.js"></script>
</html>
La aplicación.js dentro del público
angular.module(''idetikApp'', [ ''ngResource'', ''ngRoute'']);
angular.module(''idetikApp'').config(function ($routeProvider, $locationProvider) {
//$locationProvider.html5Mode(true);
$routeProvider.when(''/'', {templateUrl: ''public/partials/main.html'', controller:''mainctrl''})
});
angular.module(''idetikApp'').controller(''mainctrl'', function ($scope) {
$scope.mayvar = "Hello from client Node JS "
})
YThe main.html
<h1>this is a partial</h1>
<h2>{{mayvar}}</h2>
y finalmente la estructura de archivos para las rutas de archivos y la configuración IIS del servidor
CONFIGURACIÓN DEL SERVIDOR