我想将React应用程序部署为Microsoft Azure上的静态网站(通过FTP和WebApp完成),并与之链接一个nodejs应用程序(带有express的服务器端命令),该应用程序将命令发送到sql数据库。 / p>
我尝试在Azure上创建两个不同的应用程序(实际网站和nodejs应用程序)并将其链接,但无法正常工作 我尝试使用web.config文件更改规则,但它不起作用 我确实阅读了很多文档(stackoverflow,microsoft azure文档,博客,tomshardware,github,开发人员网站,...) 另一方面,我做了很多尝试,并做了一些改动(使用/ azkdazdok之类的Azure工具创建特殊路径来链接nodejs应用程序的index.js和其他小东西)
我的react应用只有一种发送请求的功能:
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,带有/ dot入口点。每次需要时它都连接到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>
但是问题是: -我在Miscrosoft Azure上创建了WebApp + MySQL -通过FileZila发送React版本 -发送了index.js和其他需要的nodejs文件 -运行App Service Editor的控制台以进行npm install-保存index.js库 -更改了要链接到nodejs index.js的请求的路由
我仍然有相同的问题: -错误405:POST不允许使用该方法 -状态200(带有GET),但回答“您需要启用JavaScript才能运行此应用。”
我是否必须通过两个应用再次尝试另一种方法?一个应用程序链接到虚拟机?还有吗?
我的预期结果是将请求发送到带有:443 / dot的地址,带有index.js的nodejs使其在app.post中工作。它可以在本地完美运行,但是有些事情我不能在本地完成,例如真实测试或仅与客户签订合同。这是我第一次进行React + Node + Express项目,而一个必须做的人(专家)不在了,而我的主要职责是算法,以我所知道的语言查找数学和逻辑解决方案。我确实已经解决了很多问题,一个人就学会了React和一点点Node,但是现在我真的被封锁了。
谢谢