Использование express на iisnode с app.post дает 404 - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь переместить мое приложение node.js из разработки в размещенную среду. Все это работает в dev, который просто запускается с помощью npm start на моей локальной машине. Теперь я перехожу к размещенному экземпляру iisnode и мне чего-то не хватает.
web.config

<configuration>
    <system.webServer>
        <handlers>
            <add name="iisnode" path="*.njs" verb="*" modules="iisnode" />
        </handlers>
        <rewrite>
       <rules>
         <rule name="hello">
           <match url="hello/*" />
           <action type="Rewrite" url="hello.njs" />
         </rule>
                 <rule name="index_withSQL">
           <match url="ffbeReport/*" />
           <action type="Rewrite" url="index_withSQL.njs" />
         </rule>
       </rules>
     </rewrite>
         <security>
       <requestFiltering>
         <hiddenSegments>
           <add segment="node_modules" />
         </hiddenSegments>
       </requestFiltering>
     </security>
    </system.webServer>
</configuration>

index_with SQL .n js

const express = require("express");
const port=process.env.PORT || 3000
const app=express();
const fileUpload = require('express-fileupload');
const path = require("path");
app.use(express.urlencoded({extended: false}));
app.use(express.json());
app.use(express.static(__dirname));
app.use(fileUpload());
app.post('/upload', function(req, res) {
//process the uploaded data
});
app.get('/minimalIndex.*',function(req,res){res.sendFile(path.join(__dirname + '/minimalIndex.njs'));});
app.get('/personal.css',function(req,res){res.sendFile(path.join(__dirname+'/personal.css'));});
app.get('/fileFlattener.html',function(req,res){res.sendFile(path.join(__dirname+'/fileFlattener.html'));});
app.get('/uploaded.html',function(req,res){res.sendFile(path.join(__dirname+'/uploaded.html'));});
app.get('/',function(req,res){res.sendFile(path.join(__dirname + '/minimalIndex.html'));});
app.get('/ffbeReport*',function(req,res){res.sendFile(path.join(__dirname + '/minimalIndex.html'));});
app.get('/googleOAuthSuccess',function(req,res){res.sendFile(path.join(__dirname + '/minimalIndex.html'));});
app.get('/static/units.json',function(req,res){res.sendFile(path.join(__dirname + '/static/flattenedStaticUnits.json'));});
const webserver = app.listen(port,function(){console.log('Express web server is running...on ${port}');});

minimalIndex. html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Upload Form</title>
<link rel="stylesheet" type="text/css" href="personal.css"/>

</head>
<body>
  <center>
    <H1>Upload your Units</H1><br>
    <fieldset>
      <div>Provide the units output file from the FFBE Sync tool</div>
     <form ref='uploadForm' 
      id='uploadForm' 
      action='/upload' 
      method='POST' 
      target="uploaded.html"
      encType="multipart/form-data">
        <input type="file" name="sampleFile" />
        <input type='submit' value='Upload!' />
    </form>     
  </center>

</body>
</html>

Когда я go до http://velgarth.w27.wh-2.com/minimalIndex.html или / ffbeReport, я получаю минимальную страницу индекса просто отлично. Но когда я пытаюсь загрузить файл, я получаю сообщение об ошибке IIS 404

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Detailed Error Information:
Module     IIS Web Core
Notification       MapRequestHandler
Handler    StaticFile
Error Code     0x80070002
Requested URL      http://velgarth.w27.wh-2.com:80/upload
Physical Path      E:\web\velgarth\upload
Logon Method       Anonymous
Logon User     Anonymous

. На мой взгляд, проблема заключается в том, что он пытается запустить файл, поскольку в нем говорится, что обработчик - это StaticFile. Но я действительно не знаю, какой шаг мне не хватает.

...