如何在Microsoft Azure上正确部署React + Node + Express + MySQL?

时间:2019-05-13 15:49:37

标签: mysql node.js reactjs azure express

我想将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,但是现在我真的被封锁了。

谢谢

0 个答案:

没有答案