【问题标题】:iisnode gives 'Bad Request' for post methodiisnode 为 post 方法提供“错误请求”
【发布时间】:2017-04-06 07:35:10
【问题描述】:

我开发了 nodejs express 应用程序。在节点服务器上运行时工作正常。但是在 iis 服务器上托管后,它总是给出“错误请求”作为响应。 Get 调用工作正常。

以下是我的 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'));
});

【问题讨论】:

  • 你能解决这个问题吗?我在使用 IIS 的 VM 中托管时遇到同样的问题
  • @CampDev 请检查答案。它对我有用。

标签: node.js express iis iisnode


【解决方案1】:

我可以通过添加来解决这个问题

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

到 web.config 。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多