Ошибка Heroku при развертывании приложения: «Ошибка: не удается найти модуль» /app/index.js ‘

#reactjs #express #heroku

#reactjs #выразить #heroku

Вопрос:

Я пытаюсь понять, как развернуть приложения react-express в Heroku, поэтому я создал очень простое приложение для этого. Это create-react-app интерфейс с экспресс-серверной частью, с сервером разработки на localhost: 3000, который вызывает прокси-api на сервер на localhost: 5000. Однако я продолжаю получать «ошибку приложения» всякий раз, когда пытаюсь загрузить URL-адрес своего приложения, и после проверки журналов ошибок я заметил следующую ошибку:

 Error: Cannot find module '/app/index.js'
app[web.1]: at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)
app[web.1]: at Function.Module._load (internal/modules/cjs/loader.js:667:27)
app[web.1]: at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
app[web.1]: at internal/main/run_main_module.js:17:47 {
app[web.1]: code: 'MODULE_NOT_FOUND',

 

Любые советы о том, как это решить?

Вот структура моего проекта:

 client
  -build
  -node_modules
public
  -index.html
src
  -App.js
  -index.js
package.json
yarn.lock

server
  -models
     -reviews.js
  -node_modules
  -package.json
  -server.js
  -yarn.lock
 

И вот как я настроил свой сервер:

 const express = require('express');
const cors = require('cors')
const bodyParser = require('body-parser');
const mongoose = require('mongoose')
const Review = require('./models/reviews')
const path = require('path')

//Server
const app = express();
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Listening on port ${port}`));

//Middleware
app.use(express.static(path.join(__dirname, 'build')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.urlencoded())
app.use(cors())

//Mongo config
const dbURI = 'mongodb srv://joshydsimon:Josh1985!@mochawelly.8cxdz.mongodb.net/MochaWelly?retryWrites=trueamp;w=majority'
mongoose.connect(dbURI, {useNewUrlParser:true, useUnifiedTopology:true})
.then(() => {
    console.log('connected to db')
})
.catch((err) => {
    console.log(err)
})

app.get('/api/all-reviews', (req,res) => {
  Review.find()
  .then((result) => {
      res.send(result)
  })
  .catch(err => {
      console.log(err)
  })
})

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

Наконец, вот несколько сценариев, которые я добавил в package.json (на стороне сервера):

    "start": "node index.js",
  "heroku-postbuild": "cd client amp;amp; npm install amp;amp; npm run build",
 

Комментарии:

1. привет, мне интересно, найдете ли вы решение, поскольку большинство онлайн-руководств предназначены для каталогов, в которых сервер и сценарий постбилдинга heroku находятся в главном корне.

Ответ №1:

Возможно, он не направляется в вашу клиентскую папку?

 //Try this?

if (process.env.NODE_ENV === "production") {
  app.use(express.static("client/build"));
  app.get("*", (req, res) => {
    res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
  });
} 

Также попробуйте это:

 "scripts": {
"client-install": "npm install --prefix client",
"start": "node server.js",
"server": "nodemon server.js",
"client": "npm start --prefix client",
"dev": "concurrently "npm run server" "npm run client"",
"heroku-postbuild": "NPM_CONFIG_PRODUCTION=false npm install --prefix client amp;amp; npm run build --prefix client"}
 

Также попробуйте это:

 app.use(express.static(path.join(__dirname, 'client/build')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.urlencoded())
app.use(cors())