如何使用 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
我似乎无法让 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