【问题标题】:Heroku react deployHeroku 反应部署
【发布时间】:2022-01-25 16:19:00
【问题描述】:

所以构建运行了,但它显然没有使用正确的 package.json 文件,因为它获得的唯一依赖项是 npm。当我到达我部署的网站时,我从 Heroku 收到默认的应用程序错误。这些是构建日志:

Logs

这是我的文件布局的样子: Visual Studio

这是 server.js 文件:

const express = require('express')
const mongoose = require('mongoose')
const PORT = process.env.PORT || 3000
const jwtAuth = require("./middleware/jwtAuth")
require("dotenv").config()
const cors = require('cors');
const authRoutes = require('./routes/auth')
const orderRoutes = require('./routes/order')
const axios = require('axios')

const corsOptions = {
  origin: 'http://localhost:3000',
}

const app = express()
//this will convert the request into json, since node doesn't accept json by default
app.use(express.json());
//this will enable cors on localhost
app.use(cors(corsOptions));


app.use('/api/auth', authRoutes)
app.use('/portfolio', jwtAuth)
app.use('/api/order', orderRoutes)

app.get('/secret', jwtAuth, (req, res) => {
  res.send('Secret Hello World!')
})
//fetch testing
app.use('/stock', jwtAuth, function(req, res, next) {
  const apikey = "M7DSRJECMBCEEWGF";
  const ticker = ['MSFT']

  let completed = 0;
  const results = [];
  console.log(ticker);
  for (let i = 0; i < ticker.length; i++) {
    const oneTicker = ticker[i];

    axios.get(
        `https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=${ticker}&apikey=${apikey}`
      )
    .then((response) => {
      completed += 1;

      results.push(response.data);
      if (completed === ticker.length) {
        //All ticker have finished their response
        console.log("completed");

        res.send({
          success: true,
          message: "Ticker info",
          results,
        });
      }

      console.log(ticker);
    })
    .catch((e) => {
      console.error(e);
    });
  }
})

app.get('/auth', jwtAuth, (req, res) => {
  res.status(200).send("Welcome home, cowboy")
})

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.get('/secret', jwtAuth, (req, res) => {
  res.send('Secret Hello World!')
})

app.get('*', (req, res) => {
  res.send('This route does not exist')
})

mongoose
  .connect(process.env.MONGODB_URI, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  })
  .then(() => {
    app.listen(PORT, () => console.log(`Server started on PORT ${PORT}`))
  })
  .catch((err) => {
    console.log(err)
    process.exit(1)
  })

Heeelp,我真的很想了解 heroku 上的部署是如何工作的! :)

【问题讨论】:

  • 你npm install --save了吗?

标签: node.js reactjs docker heroku deployment


【解决方案1】:

您在 devDependencies 中定义了 mongoose,确实在 slug 创建阶段安装,但在实际部署应用程序之前将它们删除,即 documented here。

默认情况下,Heroku 将安装 package.json 中列出的所有依赖项,位于 dependencies 和 devDependencies 下。

在运行安装和构建步骤之后,Heroku 将在部署应用程序之前删除 devDependencies 下声明的包。

有了这些信息,您可以选择将mongoose 移动到dependencies - 这可能是您想要的。

如果您想将其保留在devDependencies 下,您可以通过更新配置来拥有Heroku keep them in the built slug。 我不建议这样做,除非您有充分的理由将其保留为开发依赖项。

heroku config:set NPM_CONFIG_PRODUCTION=false YARN_PRODUCTION=false

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 1970-01-01
    • 2021-04-07
    • 2019-06-20
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多