如何使用 Azure 应用服务设置服务器以接受 POST 请求

How to set up server with Azure app services to take POST requests

我似乎无法让 Azure 应用服务接受 GET 以外的任何请求。我知道 express 应用程序是 运行 因为我将 '/' URL 默认指向 server/index.js (我的 express 服务器)并且可以改变行为(我重定向到另一个路径).但是当我尝试访问服务器上存在的另一个端点时,它给了我一个 404。

我的配置已设置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="false" />
    <iisnode watchedFiles="web.config;*.js" />
    <handlers>
    <add name="iisnode" path="server/index.js" verb="*" modules="iisnode" />
    </handlers>
    <rewrite>
    <rules>
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
            <match url="^server/index.js\/debug[\/]?" />
        </rule>
        <rule name="app" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
            <match url="iisnode.+" negate="true" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
            <action type="Rewrite" url="server/index.js" />
        </rule>
    </rules>
    </rewrite>
</system.webServer>
</configuration>

快递服务器代码:

const express = require('express');

const fs = require('fs');
const path = require('path');
const axios = require('axios');
const bodyParser = require('body-parser');

const app = express();

//initialize express
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use(express.static(`${__dirname}./../dist`));

app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, './../dist/index.html'), (err) => {
    if (err) {
      res.status(500).send(err)
    }
  })
});

app.post('/login', (req, res) => {

    /* Login logic here*/
});

/* * Server * */
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening to port ${port}`));

事实证明这是一个关于安全性的非常晦涩的问题。更新 web.config 以包含以下内容:

<security>
  <requestFiltering>
    <verbs allowUnlisted="true">
      <add verb="OPTIONS" allowed="true" />
    </verbs>
  </requestFiltering>
</security>

https://docs.microsoft.com/en-us/iis/manage/configuring-security/use-request-filtering