Я бы хотел развернуть реагирующее приложение как статический веб-сайт в Microsoft Azure (созданный FTP и WebApp) и связать с ним приложение nodejs (серверные команды с экспресс-вызовом), которое отправляет команды в базу данных sql.
Я пытался создать два разных приложения в Azure (приложение веб-сайта и nodejs) и связать его, но это не сработало
Я пытался изменить правила с помощью файла web.config, и это не сработало
Я прочитал много документации (stackoverflow, документы Microsoft Azure, блоги, Tomshardware, GitHub, веб-сайт разработчиков, ...)
Кроме того, я сделал много попыток с небольшими изменениями (создание специального пути с помощью инструмента Azure, такого как / azkdazdok, чтобы связать index.js приложения nodejs и другие мелочи)
Мое приложение реагирования имеет только одну функцию для отправки запросов:
export const request=function(info){
return fetch("https://myaddress/index.js:443/dot",{
//return fetch("http://localhost:8081/dot",{
method:info.method,
credentials:'same-origin',
body:JSON.stringify(info),
mode:'cors',
headers:{'Content-Type':'application/json'}
});
}
И на index.js узла приложения у меня есть:
const version="1.0.0"
var app=require('express')();
var http=require('http').Server(app);
var mysql=require('mysql');
var bodyParser=require('body-parser');
var jwt = require('jsonwebtoken');
var cookieParser = require('cookie-parser');
var fs=require("fs");
//~ app.use(express.static('../wwwroot'));
app.use(bodyParser.json({limit:'50mb'}));
app.use(bodyParser.urlencoded({limit:'50mb',extended:true}));
app.use(cookieParser());
const CREATE_TABLE_USER = fs.readFileSync("src/sql_script/create_table_user.sql").toString();
const CREATE_TABLE_USER_PREFERENCES = fs.readFileSync("src/sql_script/create_table_user_preferences.sql").toString();
const CREATE_TABLE ...
...;
var con=mysql.createConnection({
host:[myhost],
user:[user],
password:[pw]",
database:[db_name],
port:3306,
ssl:{ca:fs.readFileSync({ca-cert filename})}
});
con.connect(function(err){if(err){console.log(err);}console.log("Connected to database\n");});
con.query(CREATE_TABLE_USER,function(err,result){if(err){console.log(err);}})
con.query(CREATE_TABLE_USER_PREFERENCES,function(err,result){if(err){console.log(err);}})
con.query(...
...;
[functions]
app.post('/dot',function(req,res){
if(req.body.action === "something"){something(req,res);}
});
http.listen(443,function(){console.log('app listening on port 443!');})
Он прослушивает порт 443 с точкой входа / точка. Он подключается к базе данных mysql каждый раз, когда это необходимо, и выполняет всю работу.
И у меня есть файл web.config
<?xml version="1.0"?>
<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="server/index.js" verb="*" modules="iisnode"/>
</handlers>
<rewrite>
<rules>
<rule name="DynamicContentDot">
<match url="^dot"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
</conditions>
<action type="Rewrite" url="src/index.js"/>
</rule>
<rule name="DynamicContentTest">
<match url="^test"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
</conditions>
<action type="Rewrite" url="src/index.js"/>
</rule>
<rule name="React Routes" stopProcessing="true">
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true"/>
</conditions>
<action type="Rewrite" url="index.html"/>
</rule>
</rules>
</rewrite>
<httpErrors existingResponse="PassThrough"/>
</system.webServer>
</configuration>
Но проблема в следующем:
-Я создал WebApp + MySQL на Miscrosoft Azure
-Отправили сборку React от FileZila с
-Отправили необходимые файлы index.js и другие nodejs
- Запустите консоль редактора службы приложений для установки npm - сохраните библиотеки index.js
-Изменили маршрутизацию запросов для ссылки на nodejs index.js
И все же у меня есть те же проблемы:
ошибка 405: метод не разрешен в POST
-status 200 с GET, но отвечает «Вам нужно включить JavaScript для запуска этого приложения».
Должен ли я попробовать другой способ еще раз с двумя приложениями? Одно приложение связано с виртуальной машиной? Что-то еще?
Мой ожидаемый результат - просто отправить запрос по адресу: 443 / dot, nodejs с index.js заставляет его работать в app.post. Он отлично работает на местном уровне, но есть некоторые вещи, которые я не могу сделать на местном уровне, такие как реальные тесты или просто завершение контракта с заказчиком. Это первый раз, когда я делал проект React + Node + Express, и одного парня, который должен был это делать (специалиста), там больше нет, и моя основная часть - это алгоритмические, находящие математические и логические решения на языках, которые я знаю. Я уже решил много проблем, изучил один React и немного Node, но теперь я действительно заблокирован.
Спасибо