Как настроить сервер со службами приложений Azure для приема запросов POST - PullRequest
0 голосов
/ 08 октября 2018

Мне не удается заставить службы приложений Azure принимать любые запросы, кроме GET.Я знаю, что экспресс-приложение запущено, потому что я указываю URL-адрес «/», чтобы посмотреть на server / index.js (мой экспресс-сервер) и могу изменить его поведение (я перенаправляю на другой путь).Но когда я пытаюсь подключиться к другой конечной точке, которая существует на сервере, она дает мне 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}`));

1 Ответ

0 голосов
/ 08 октября 2018

Оказывается, это была действительно неясная проблема, связанная с безопасностью.Обновите файл 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

...