2017-04-06 63 views
0

我开发了nodejs express app。在节点服务器上运行时它工作正常。但在iis服务器上托管之后,它总是给出'不良请求'作为响应。 打电话工作正常。iisnode提供'Bad Request'用于post方法

以下是我web.conf文件

<?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="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> 

     <iisnode  
     nodeProcessCommandLine="C:\Program Files\nodejs\node.exe" 
     nodeProcessCountPerApplication="1" 
     maxConcurrentRequestsPerProcess="1024" 
     maxNamedPipeConnectionRetry="100" 
     namedPipeConnectionRetryDelay="250"  
     maxNamedPipeConnectionPoolSize="512" 
     maxNamedPipePooledConnectionAge="30000" 
     asyncCompletionThreadCount="0" 
     initialRequestBufferSize="4096" 
     maxRequestBufferSize="65536" 
     watchedFiles="*.js;iisnode.yml" 
     uncFileChangesPollingInterval="5000"  
     gracefulShutdownTimeout="60000" 
     loggingEnabled="false" 
     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" 

    /> 
    <modules> 
     <remove name="WebDAVModule"/> 
    </modules> 
    </system.webServer> 
</configuration> 

server.js文件如下

'use strict'; 

// Module dependencies. 
var express = require('express'), 
    path = require('path'), 
    fs = require('fs'), 
    methodOverride = require('method-override'), 
    morgan = require('morgan'), 
    bodyParser = require('body-parser'); 

var app = module.exports = exports.app = express(); 

app.locals.siteName = "IOS IBE"; 

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

app.get('/*', function (req, res) { 
    res.sendFile(__dirname + '/public/index.html'); 
}); 

app.use(methodOverride()); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: false})); 


// Start server 
var port = process.env.PORT; 
app.listen(port, function() { 
    console.log('DP Admin server listening on port %d in %s mode', port, app.get('env')); 
}); 
+0

你能解决这个问题吗?我有与虚拟主机IIS托管相同的问题 – CampDev

+0

@CampDev请检查答案。这个对我有用。 –

回答

0

我可以通过添加

<system.webServer> 
    <httpErrors existingResponse="PassThrough" /> 
</system.webServer> 

到web.config中修复了这个问题。

希望这会对其他人有所帮助。