繁体   English   中英

在Azure上部署时无法将Node.js应用连接到React.js应用

[英]Unable to connect Node.js app to React.js app while deploying on Azure

我正在尝试在Azure上部署MERN应用程序(React.js作为客户端,Node.js作为服务器)。 我创建了一个Cosmos数据库帐户和数据库(MongoDB),并将Node.js应用程序连接到该数据库。

我无法在Node.js和React.js应用之间创建通信。

我已经创建了React.js应用程序的构建并粘贴到Node.js应用程序中并部署了Node.js应用程序。

我有问题

'不能获取/'

我还尝试通过在以下结构中将整个React.js应用程序粘贴到Node.js应用程序中来手动部署该应用程序-

|- node-app
   |- client
       |- react-app
|- node-app rest files...

我不知道如何在生产中获取环境变量

我的app.js如下-

require('dotenv').config();
require('./config/database.config');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(express.static(path.join(__dirname, 'build')));

app.get('*', (req,res) =>{
  res.sendFile(path.join(__dirname+'/build/index.html'));
});

app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

我的数据库配置文件如下-

var mongoose = require('mongoose');

mongoose.connect(
  process.env.DB_CONN,
  {
    auth :{user : process.env.DB_USER, password : process.env.DB_PW},
    useNewUrlParser: true
  })
    .then(() => {
    console.log("Successfully connected to the database");    
  }).catch(err => {
    console.log('Could not connect to the database. Exiting now...', err);
    process.exit();
});

根据我的经验,我认为您的问题是由您的代码app.use(express.static(path.join(__dirname, 'build'))); 服务于由npm run build的React客户端的静态文件。

在Azure上,本地变量和Azure变量__dirname有所不同。 在本地,__ dirname变量的值始终是启动节点进程的完整路径名,例如,如果在CMD中以D:\\ home运行节点,则print __dirname将返回D:\\ home。 但是在Azure上,您将在任何路径中看到__dirname值。 如果您尝试运行命令节点-e“ const path = require('path'); console.log(__ dirname);” 在Kudu控制台中,如下图所示。

在此处输入图片说明

因此,始终build path.join(__dirname, 'build')值,该值与IIS启动的节点的当前路径无关。 因此,要解决这个问题,请使用像一个绝对路径D:\\home\\site\\wwwroot代替__dirname可变path.join方法或者直接使用D:\\home\\site\\wwwroot\\buildexpress.static方法。

如有任何疑问,请随时告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM