azure中的节点web应用程序是空白的

时间:2016-01-31 19:29:12

标签: node.js azure express deployment

我是节点和表达的新手,但是当我在windows azure中托管我的节点web应用程序时,我遇到了一个问题,顺便说一句,这在localhost上运行得很好。我只是得到一个空白的白色屏幕。

这是我的: 的 server.js

var root = require('root');
var github = require('github-auth');
var express = require('express');
var path = require('path');

// var app = root();
var app = express();


var gh = github('clientid', 'clientsecret, {
  organization: 'my-org',
  team: 'my-team',
  autologin: true // This automatically redirects you to github to login
});


app.get('/login', gh.login);


app.use(express.static(__dirname + '/'));


app.all('*', gh.authenticate);
app.all('*', function(req, res, next) {
    if (!req.github) return res.sendFile(__dirname + '/login.html');


  if (!req.github.authenticated) res.sendFile(path.join(__dirname+'/kickout.html'));
  next();
});

app.get('/main',function(req,res){
  res.sendFile(path.join(__dirname+'/main.html'));
});

app.get('/about',function(req,res){
  res.sendFile('/kickout.html');
});

app.listen(3000);

console.log("Running at Port 3000");

2 个答案:

答案 0 :(得分:1)

在Azure Web Apps服务上运行的Node.js应用程序通过IISNode托管在IIS处理的映射上,这使得Named Pipe可以接收传入的请求,而不是像在本地运行时那样使用的TCP端口。 / p>

Named Pipe已定义为Azure Web Apps上Node.js运行时中的port。您可以在应用链接中定义portprocess.env.PORT || 3000,您的应用可以在Azure上或本地运行。

您可以检查根目录中是否有文件web.config,这是您的应用程序的IIS配置。它应该具有类似的内容:

<configuration>
     <system.webServer>
          <handlers>
               <!-- indicates that the app.js file is a node.js application to be handled by the iisnode module -->
               <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
          </handlers>
          <rewrite>
               <rules>

                    <!-- Don't interfere with requests for node-inspector debugging -->
                    <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">                    
                        <match url="^server.js\/debug[\/]?" />
                    </rule>

                    <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
                    <rule name="StaticContent">
                         <action type="Rewrite" url="public{REQUEST_URI}"/>
                    </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>

               </rules>
          </rewrite>
          <!-- You can control how Node is hosted within IIS using the following options -->
        <!--<iisnode      
          node_env="%node_env%"
          nodeProcessCommandLine="&quot;%programfiles%\nodejs\node.exe&quot;"
          nodeProcessCountPerApplication="1"
          maxConcurrentRequestsPerProcess="1024"
          maxNamedPipeConnectionRetry="3"
          namedPipeConnectionRetryDelay="2000"      
          maxNamedPipeConnectionPoolSize="512"
          maxNamedPipePooledConnectionAge="30000"
          asyncCompletionThreadCount="0"
          initialRequestBufferSize="4096"
          maxRequestBufferSize="65536"
          watchedFiles="*.js"
          uncFileChangesPollingInterval="5000"      
          gracefulShutdownTimeout="60000"
          loggingEnabled="true"
          logDirectoryNameSuffix="logs"
          debuggingEnabled="true"
          debuggerPortRange="5058-6058"
          debuggerPathSegment="debug"
          maxLogFileSizeInKB="128"
          appendToExistingLog="false"
          logFileFlushInterval="5000"
          devErrorsEnabled="true"
          flushResponse="false"      
          enableXFF="false"
          promoteServerVars=""
         />-->
        <iisnode watchedFiles="*.js;node_modules\*;routes\*.js;views\*.jade"/>
     </system.webServer>
</configuration>

答案 1 :(得分:0)

通过Azure Web Apps托管Node.js应用程序时,您需要修改端口初始化,如以下简化示例所示:

var http = require('http'),
    port = process.env.PORT || 1337;

http.createServer(function(req, res) {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello World\n');
}).listen(port);

在本地运行时,将使用文字端口(例如上面的1337),但在Azure中运行时,托管平台将为process.env.port分配一个端口,并将使用该端口。您可以找到有关部署Node.js应用here的完整演练。在WebApp中运行时,使用称为 IIS节点的技术来运行您的节点应用程序。有关详细信息,请访问here