之前成功的Heroku部署失败。错误代码H10

问题描述 投票:0回答:1

我之前已经成功部署了这个应用程序,但现在当我尝试部署新代码时,当我从浏览器请求应用程序时,我收到一个H10错误。

来自heroku日志的日志 --tail

到目前为止,我已经尝试过的事情。

  • 检查了快递监听的是process.env.PORT而不是process.env.port。
  • heroku restart
  • heroku local web 凑合
  • 检查我所使用的环境变量是否已在heroku配置中设置。
  • 检查了依赖关系(说实话,我不100%确定是否有遗漏的地方)。
  • 删除Heroku dyno实例并创建一个新的部署。

感谢任何和所有的帮助。谢谢。

serverindex.js。

const express = require('express')
const morgan = require('morgan')
const compression = require('compression')
const session = require('express-session')
const passport = require('passport')
const SequelizeStore = require('connect-session-sequelize')(session.Store)
const db = require('./db')
const sessionStore = new SequelizeStore({db})
const PORT = process.env.PORT || 8080
const app = express()
module.exports = app

// This is a global Mocha hook, used for resource cleanup.
// Otherwise, Mocha v4+ never quits after tests.
if (process.env.NODE_ENV === 'test') {
  after('close the session store', () => sessionStore.stopExpiringSessions())
}

/**
 * In your development environment, you can keep all of your
 * app's secret API keys in a file called `secrets.js`, in your project
 * root. This file is included in the .gitignore - it will NOT be tracked
 * or show up on Github. On your production server, you can add these
 * keys as environment variables, so that they can still be read by the
 * Node process on process.env
 */
if (process.env.NODE_ENV !== 'production') require('../secrets')

// passport registration
passport.serializeUser((user, done) => done(null, user.id))

passport.deserializeUser(async (id, done) => {
  try {
    const user = await db.models.user.findByPk(id)
    done(null, user)
  } catch (err) {
    done(err)
  }
})

const createApp = () => {
  // logging middleware
  app.use(morgan('dev'))

  // body parsing middleware
  app.use(express.json())
  app.use(express.urlencoded({extended: true}))

  // compression middleware
  app.use(compression())

  // session middleware with passport
  app.use(
    session({
      secret: process.env.SESSION_SECRET || 'none',
      store: sessionStore,
      resave: false,
      saveUninitialized: false
    })
  )
  app.use(passport.initialize())
  app.use(passport.session())

  // auth and api routes
  app.use('/auth', require('./auth'))
  app.use('/api', require('./api'))

  // static file-serving middleware
  app.use(express.static(path.join(__dirname, '..', 'public')))

  // any remaining requests with an extension (.js, .css, etc.) send 404
  app.use((req, res, next) => {
    if (path.extname(req.path).length) {
      const err = new Error('Not found')
      err.status = 404
      next(err)
    } else {
      next()
    }
  })

  // sends index.html
  app.use('*', (req, res) => {
    res.sendFile(path.join(__dirname, '..', 'public/index.html'))
  })

  // error handling endware
  app.use((err, req, res, next) => {
    console.error(err)
    console.error(err.stack)
    res.status(err.status || 500).send(err.message || 'Internal server error.')
  })
}

const startListening = () => {
  // start listening (and create a 'server' object representing our server)
  app.listen(PORT, '0.0.0.0', () => console.log(`Spinning up on PORT: ${PORT}`))

  // set up our socket control center
}

const syncDb = () => db.sync()

async function bootApp() {
  await sessionStore.sync()
  await syncDb()
  await createApp()
  await startListening()
}
// This evaluates as true when this file is run directly from the command line,
// i.e. when we say 'node server/index.js' (or 'nodemon server/index.js', or 'nodemon server', etc)
// It will evaluate false when this module is required by another module - for example,
// if we wanted to require our app in a test spec
if (require.main === module) {
  bootApp()
} else {
  createApp()
}

package.json

  "name": "57st-built-in-creator",
  "version": "1.0.0",
  "description": "Configurator",
  "engines": {
    "node": ">= 7.0.0"
  },
  "main": "index.js",
  "scripts": {
    "build-client": "webpack",
    "build-client-watch": "webpack -w",
    "deploy": "script/deploy",
    "heroku-token": "script/encrypt-heroku-auth-token.js",
    "lint": "eslint ./ --ignore-path .gitignore",
    "lint-fix": "npm run lint -- --fix",
    "prepare": "if [ -d .git ]; then npm-merge-driver install; fi",
    "prettify": "prettier --write \"**/*.{js,jsx,json,css,scss,md}\"",
    "postinstall": "touch secrets.js",
    "seed": "node script/seed.js",
    "start": "node server",
    "start-dev": "NODE_ENV='development' npm run build-client-watch & NODE_ENV='development' npm run start-server",
    "start-server": "nodemon server -e html,js,scss --ignore public --ignore client",
    "test": "NODE_ENV='test' mocha \"./server/**/*.spec.js\" \"./client/**/*.spec.js\" \"./script/**/*.spec.js\" --require @babel/polyfill --require @babel/register"
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.{js,jsx}": [
      "prettier --write",
      "npm run lint-fix",
      "git add"
    ],
    "*.{css,scss,json,md}": [
      "prettier --write",
      "git add"
    ]
  },
  "author": "57st Design",
  "license": "MIT",
  "dependencies": {
    "@popperjs/core": "^2.3.3",
    "aws-sdk": "^2.668.0",
    "axios": "^0.19.0",
    "bootstrap": "^4.4.1",
    "compression": "^1.7.3",
    "connect-session-sequelize": "^6.0.0",
    "date-fns": "^2.12.0",
    "express": "^4.16.4",
    "express-session": "^1.15.1",
    "history": "^4.9.0",
    "jspdf": "^1.5.3",
    "morgan": "^1.9.1",
    "multer": "^1.4.2",
    "multer-s3": "^2.9.0",
    "passport": "^0.4.0",
    "passport-google-oauth": "^2.0.0",
    "pg": "^7.9.0",
    "pg-hstore": "^2.3.2",
    "prop-types": "^15.7.2",
    "react": "^16.8.6",
    "react-bootstrap": "^1.0.1",
    "react-datepicker": "^2.14.1",
    "react-dom": "^16.8.6",
    "react-items-carousel": "^2.8.0",
    "react-redux": "^7.0.1",
    "react-router-bootstrap": "^0.25.0",
    "react-router-dom": "^5.0.0",
    "react-scrollable-list": "^1.2.0",
    "react-scrolllock": "^5.0.1",
    "redux": "^4.0.1",
    "redux-logger": "^3.0.6",
    "redux-thunk": "^2.3.0",
    "sequelize": "^5.21.7",
    "window": "^4.2.7"
  },
  "devDependencies": {
    "@babel/core": "^7.4.3",
    "@babel/plugin-proposal-class-properties": "7.4.0",
    "@babel/plugin-proposal-decorators": "7.4.0",
    "@babel/plugin-proposal-export-namespace-from": "7.2.0",
    "@babel/plugin-proposal-function-sent": "7.2.0",
    "@babel/plugin-proposal-json-strings": "7.2.0",
    "@babel/plugin-proposal-numeric-separator": "7.2.0",
    "@babel/plugin-proposal-throw-expressions": "7.2.0",
    "@babel/plugin-syntax-dynamic-import": "7.2.0",
    "@babel/plugin-syntax-import-meta": "7.2.0",
    "@babel/polyfill": "^7.4.3",
    "@babel/preset-env": "^7.4.3",
    "@babel/preset-react": "^7.0.0",
    "@babel/register": "^7.4.0",
    "axios-mock-adapter": "^1.16.0",
    "babel-eslint": "^10.0.1",
    "babel-loader": "^8.0.5",
    "chai": "^4.2.0",
    "enzyme": "^3.9.0",
    "enzyme-adapter-react-16": "^1.12.1",
    "eslint": "^5.16.0",
    "eslint-config-fullstack": "^6.0.0",
    "eslint-config-prettier": "^4.1.0",
    "eslint-plugin-react": "^7.12.4",
    "git-url-parse": "^11.1.2",
    "husky": "^1.3.1",
    "lint-staged": "^8.1.5",
    "mocha": "^6.1.4",
    "nodemon": "^1.18.3",
    "npm-merge-driver": "^2.3.6",
    "prettier": "^1.19.1",
    "react-test-renderer": "^16.4.2",
    "redux-devtools-extension": "^2.13.5",
    "redux-mock-store": "^1.5.3",
    "simple-git": "^1.121.0",
    "supertest": "^4.0.2",
    "webpack": "^4.16.4",
    "webpack-cli": "^3.1.0",
    "yaml": "^1.6.0"
  }
}
node.js express heroku
1个回答
0
投票

我得到了同样的错误.它可能与你的部署过程中使用节点14的事实有关。

在你的package.json中添加这个,就可以解决这个问题了。

"engines": {
    "node": "=12"
  }
© www.soinside.com 2019 - 2024. All rights reserved.