我一直在尝试将Node应用程序部署到Azure,但遇到了问题。我想我知道问题的根源,但我不知道如何更改配置来修复它。
出于某种原因,我的节点进程希望使用D:\ home \ site \ wwwroot \ bin作为查找脚本文件和视图的路径,而不是查看D:\ home \ site \ wwwroot。
我收到错误:错误:ENOENT,打开' D:\ home \ site \ wwwroot \ bin \ views \ layouts \ layout.hbs' 在stacktrace上,这意味着我的app.js正在被调用,但它正在寻找错误的视图位置。
如何告诉azure再查找一个目录而不是使用bin作为默认值?附件是我的VM上的站点目录结构。
/位点
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2/9/2015 6:27 PM bin
d---- 2/9/2015 6:27 PM controllers
d---- 2/9/2015 6:27 PM models
d---- 2/9/2015 6:27 PM node_modules
d---- 2/9/2015 6:27 PM public
d---- 2/9/2015 6:28 PM tests
d---- 2/9/2015 6:28 PM views
-a--- 2/9/2015 6:38 PM 2448 app.js
-a--- 2/7/2015 1:17 AM 634 config.js
-a--- 2/9/2015 6:25 PM 202392 hostingstart.html
-a--- 2/7/2015 1:40 AM 597 package.json
-a--- 2/5/2015 9:37 PM 22 README.md
-a--- 2/7/2015 1:18 AM 1236 routes.js
-a--- 2/7/2015 1:49 AM 1801 Web.config
-a--- 2/5/2015 9:37 PM 1671 Web.Debug.config
网站/ bin中
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 10/21/2014 11:29 PM 629 ChangeConfig.ps1
-a--- 10/21/2014 11:29 PM 2141 download.ps1
-a--- 1/10/2015 12:46 AM 24256 Microsoft.NodejsTools.WebRole.dll
-a--- 10/21/2014 11:29 PM 17 node.cmd
-a--- 10/21/2014 11:29 PM 1819 setup_web.cmd
-a--- 2/5/2015 9:37 PM 272 www
WWW
#!/usr/bin/env node
var debug = require('debug')('ExpressApp3');
var app = require('../app');
app.set('port', process.env.PORT || 3000);
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});
app.js
//...
var handlebars = require('express-handlebars').create(config.handlebars);
app.set('views', path.join(__dirname, 'views'));
app.engine('.hbs', handlebars.engine);
app.set('view engine', '.hbs');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));
的web.config
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your Node.js application, please visit
http://go.microsoft.com/fwlink/?LinkId=290972
-->
<configuration>
<appSettings>
<!--
<add key="StorageAccountName" value="" />
<add key="StorageAccountKey" value="" />
<add key="ServiceBusNamespace" value="" />
<add key="ServiceBusIssuerName" value="" />
<add key="ServiceBusIssuerSecretKey" value="" />
-->
</appSettings>
<system.webServer>
<!-- mimeMap enables IIS to serve particular file types as specified by fileExtension. -->
<staticContent>
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>
<modules runAllManagedModulesForAllRequests="false" />
<!-- Web.Debug.config adds attributes to this to enable remote debugging when publishing in Debug configuration. -->
<iisnode watchedFiles="web.config;*.js;routes\*.js;views\*.jade"/>
<!-- indicates that the server.js file is a Node.js application
to be handled by the iisnode module -->
<handlers>
<add name="iisnode" path="/bin/www" verb="*" modules="iisnode" />
</handlers>
<security>
<requestFiltering>
<hiddenSegments>
<remove segment="bin" />
</hiddenSegments>
</requestFiltering>
</security>
<rewrite>
<rules>
<clear />
<rule name="app" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
<match url="iisnode.+" negate="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="bin\www" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
答案 0 :(得分:3)
我今天也遇到了这个问题。我是节点的新手,所以我不确定这是否是最好的方法,但这对我有用。
我在app.js早期添加了这个
process.chdir(path.join(process.cwd(), '..'));
答案 1 :(得分:1)
这就是我解决它的方法。
我将项目中的www文件从/ bin / www移动到根目录。 在www:
中更改var app = require('../app');
到
var app = require('./ app');
然后将我的web.config更改为:
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your Node.js application, please visit
http://go.microsoft.com/fwlink/?LinkId=290972
-->
<configuration>
<appSettings>
<!--
<add key="StorageAccountName" value="" />
<add key="StorageAccountKey" value="" />
<add key="ServiceBusNamespace" value="" />
<add key="ServiceBusIssuerName" value="" />
<add key="ServiceBusIssuerSecretKey" value="" />
-->
</appSettings>
<system.webServer>
<!-- mimeMap enables IIS to serve particular file types as specified by fileExtension. -->
<staticContent>
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>
<modules runAllManagedModulesForAllRequests="false" />
<!-- Web.Debug.config adds attributes to this to enable remote debugging when publishing in Debug configuration. -->
<iisnode watchedFiles="web.config;*.js;routes\*.js;views\*.hbs"/>
<!-- indicates that the server.js file is a Node.js application
to be handled by the iisnode module -->
<handlers>
<add name="iisnode" path="www" verb="*" modules="iisnode" />
<!-- <add name="iisnode" path="bin/www" verb="*" modules="iisnode" />--!>
</handlers>
<security>
<requestFiltering>
<hiddenSegments>
<!--<remove segment="bin" />-->
</hiddenSegments>
</requestFiltering>
</security>
<rewrite>
<rules>
<clear />
<rule name="app" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
<match url="iisnode.+" negate="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<!--<action type="Rewrite" url="bin\www" />-->
<action type="Rewrite" url="www" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>