Azure NodeJS错误:ENOENT,打开'D:\ home \ site \ wwwroot \ bin \ views \'

我一直在尝试将一个Node应用程序部署到Azure,但遇到了一个问题。 我认为我知道问题的根源,但不知道如何改变configuration来修复它。

出于某种原因,我的节点进程正在寻找使用D:\ home \ site \ wwwroot \ bin作为查找脚本文件和视图的path,而不是查看D:\ home \ site \ wwwroot。

我得到的错误:错误:ENOENT,在堆栈跟踪打开“D:\ home \ site \ wwwroot \ bin \ views \ layouts \ layout.hbs”,这意味着我的app.js被调用,但它正在意见错误的地方。

我该如何告诉azure上一个目录来寻找布局,而不是使用bin作为默认值? 附加的是我的虚拟机上的网站的目录结构。

/现场

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 

网站/箱

 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 

万维网

 #!/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> 

我今天也遇到了这个问题。 我是新来的节点,所以我不知道这是否是最好的方法,但这对我有用。

我早在app.js中join了这个

 process.chdir(path.join(process.cwd(), '..')); 

这就是我解决它的方法。

我把我的项目中的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>