Невозможно запустить приложение Express & React после кажущегося успешного развертывания до Azure - PullRequest
0 голосов
/ 26 марта 2020

Я очень расстроен. У меня есть сервис Express.js с react.js интерфейсом, который мне не удается запустить и запустить на Azure через удаленный git pu sh.

У меня это отлично работает на Heroku, но когда я попытался загрузить его на Azure, я получил ошибку, связанную с моим стартовым скриптом, из-за которой (через множество Googles) мне пришлось изменить его с “start” : “babel-node index.js” to "start": "node ./node_modules/babel-cli/bin/babel-node.js index.js”.

Развертывание теперь работает, но веб-страница не загружается. Я подозреваю, что эти выходные данные могут иметь какое-то отношение к этому:

remote: Start script "./node_modules/babel-cli/bin/babel-node.js index.js" from package.json is not found.
remote: Missing server.js/app.js files, web.config is not generated
remote: Looking for app.js/server.js under site root.
remote: The package.json file does not specify node.js engine version constraints.
remote: The node.js application will run with the default node.js version 10.15.2.

Я получаю эту ошибку в моем logging-errors.txt

Thu Mar 26 2020 16:19:40 GMT+0000 (Greenwich Mean Time): Application has thrown an uncaught exception and is terminated:
D:\home\site\wwwroot\index.js:1
(function (exports, require, module, __filename, __dirname) { import app from './src/server';
                                                                     ^^^

SyntaxError: Unexpected identifier

В моем коде индекса ниже я также экспериментировал с номером порта по умолчанию и без него.

import app from './src/server';

const PORT = process.env.port || process.env.PORT || 1337;

app.listen(PORT, () => {
    console.log(`Server started on port ${PORT}`);
});

Вот мой package.json

{
  "name": "app-demo",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node ./node_modules/babel-cli/bin/babel-node.js index.js"
  }, 
  "repository": {
    "type": "git",
    "url": "git+https://github.com/username/devsum.git"
  },
  "dependencies": {
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.3",
    "babel-eslint": "10.0.3",
    "babel-loader": "8.0.6",
    "babel-plugin-transform-object-rest-spread": "^6.26.0",
    "babel-preset-env": "^1.7.0",
    "body-parser": "^1.18.3",
    "concurrently": "^4.1.0",
    "express": "^4.17.1",
    "request": "^2.88.0",
    "validator": "^10.11.0",
    "xml2js": "^0.4.19"
  },
  "devDependencies": {
    "eslint": "^6.6.0",
    "eslint-config-airbnb": "^17.1.0",
    "eslint-plugin-import": "^2.20.1",
    "eslint-plugin-jsx-a11y": "^6.2.1",
    "eslint-plugin-react": "^7.18.3",
    "nodemon": "^1.18.10",
    "react-scripts": "^3.4.0",
    "webpack-cli": "^3.3.11"
  }
}

Узел на моей машине - 10.16.3, но Azure, кажется, не поддерживает его, поэтому я установил его на следующая наивысшая поддерживаемая версия.

Меня смущает, почему он не находит файл web.config и каталог стартового скрипта, поскольку они оба там, и я даже толкнул весь файл node_modules, а также в других столь же неудачных попытках Я нажал без узловых модулей и затем запустил «npm install» в Azure Kudu CLI, чтобы увидеть, если это что-то изменило.

Чего мне не хватает, что я делаю не так? Это сводило меня с ума в течение нескольких дней! Я включил Server.js и 'web.config` ниже.

Вот Server.js

import path from 'path';
import express from 'express';
import mainObject from './api/routes/zRoutes';
import appMiddleware from './api/middleware/appMiddleware';

const   app = express();

appMiddleware(app);

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

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


// Use routes
app.use('/app-name/api', mainObject);

// Error handler
// eslint-disable-next-line no-unused-vars
app.use((err, req, res, _) => {
    console.log(err);
    const status = err.status || 500;
    res.status(status).json(err.error);
});

export default app;

А вот web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <webSocket enabled="false" />
    <handlers>
      <add name="iisnode" path="index.js" verb="*" modules="iisnode"/>
    </handlers>
    <rewrite>
      <rules>
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
          <match url="^index.js\/debug[\/]?" />
        </rule>
        <rule name="StaticContent">
          <action type="Rewrite" url="public{REQUEST_URI}"/>
        </rule>
        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
          </conditions>
          <action type="Rewrite" url="index.js"/>
        </rule>
      </rules>
    </rewrite>
    <security>
      <requestFiltering>
        <hiddenSegments>
          <remove segment="bin"/>
          <add segment="node_modules"/>
        </hiddenSegments>
      </requestFiltering>
    </security>
    <httpErrors existingResponse="PassThrough" />
    <iisnode watchedFiles="web.config;*.js"/>
  </system.webServer>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...