node.js - 具有组合前端和后端的应用程序未部署到 Heroku

标签 node.js angular heroku deployment angular7

我有一个 Angular 前端和 Nodejs 后端应用程序。我遇到的问题是,当我部署到 Heroku 时,构建和编译成功,但我认为当我单击“打开应用程序”时,只有后端在 Heroku 上运行。我查看了有关如何在 Heroku 上部署 Angular 和 NodeJS 应用程序的多个教程和资源,并遵循了所有说明,但无法成功获取完整的 Web 应用程序(Angular 前端和 NodeJS 后端到 Heroku。

从heroku url 导航到应用程序时得到的输出是:

{"message":"Invalid Token"}

我的 package.json 是:

{
  "name": "eserver",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "main": "server.js",
    "heroku-postbuild": "ng build --prod",
    "preinstall": "npm install -g @angular/cli @angular/compiler-cli 
typescript",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^7.2.11",
    "@angular/cdk": "~7.3.3",
    "@angular/common": "^7.2.11",
    "@angular/compiler": "^7.2.11",
    "@angular/core": "^7.2.11",
    "@angular/flex-layout": "^7.0.0-beta.24",
    "@angular/forms": "^7.2.11",
    "@angular/http": "^7.2.11",
    "@angular/material": "^7.3.3",
    "@angular/platform-browser": "^7.2.11",
    "@angular/platform-browser-dynamic": "^7.2.11",
    "@angular/router": "^7.2.11",
    "@fortawesome/fontawesome-free": "^5.6.3",
    "@types/chart.js": "^2.7.42",
    "@types/web-bluetooth": "0.0.4",
    "angular-bootstrap-md": "^7.4.3",
    "body-parser": "^1.18.3",
    "bootstrap": "^4.3.1",
    "chart.js": "^2.5.0",
    "core-js": "^2.5.4",
    "cors": "^2.8.5",
    "dotenv": "^6.1.0",
    "express": "^4.16.4",
    "hammerjs": "^2.0.8",
    "material-design-lite": "^1.3.0",
    "ng-multiselect-dropdown": "^0.2.3",
    "popper.js": "^1.15.0",
    "pusher-js": "^4.4.0",
    "rxjs": "^6.4.0",
    "@angular-devkit/build-angular": "^0.6.8",
    "rxjs-compat": "^6.3.3",
    "@angular/compiler-cli": "^7.2.11",
    "@angular/cli": "~7.3.7",
    "tslib": "^1.9.0",
    "uuid": "^3.3.2",
    "zone.js": "^0.8.29",
    "bcryptjs": "^2.4.3",
    "express-jwt": "^5.3.1",
    "jsonwebtoken": "^8.2.2",
    "mongodb": "^3.0.10",
    "mongoose": "^5.1.4",
    "pusher": "^2.2.0",
    "rootpath": "^0.1.2",
    "typescript": "~3.2.4"
  },
  "devDependencies": {
    "@angular/language-service": "^7.2.11",
    "@types/jasmine": "~2.8.6",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "angular-cli-ghpages": "^0.5.3",
    "codelyzer": "~4.2.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~1.7.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.0",
    "karma-jasmine": "~1.1.1",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "^5.4.1",
    "ts-node": "~5.0.1",
    "tslint": "~5.9.1"
  }
}

我的 server.js 是:

require('rootpath')();
const express = require('express');
const app = express();
const cors = require('cors');
const bodyParser = require('body-parser');
const jwt = require('./eserver-backend/_helpers/jwt');
const errorHandler = require('./eserver-backend/_helpers/error- handler');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cors());

// use JWT auth to secure the api
app.use(jwt());

// api routes
app.use('/users', require('./eserver- 
backend/users/users.controller'));
app.use('/categories', require('./eserver- 
backend/categories/categories.controller'));
app.use('/items', require('./eserver- 
backend/items/items.controller'));
app.use('/tableOrder', require('./eserver- 
backend/tableOrder/tableOrder.controller'));
app.use('/orders', require('./eserver- 
backend/order/order.controller'));
// global error handler
app.use(errorHandler);

// start server
const port = process.env.NODE_ENV === 'production' ? (process.env.PORT || 80) : 4000;
const server = app.listen(port, function () {
console.log('Server listening on port ' + port);
});

我的进程文件是:

web: node server.js

我的文件结构是: file structure

最佳答案

Node.js 应用程序应提供 dist 文件夹中使用 ng build 构建的静态文件

在 server.js 文件中添加以下代码。

// Run the app by serving the static files
// in the dist directory
app.use(express.static(__dirname + '/dist'));

// For all GET requests, send back index.html
// so that PathLocationStrategy can be used
app.get('/*', function(req, res) {
  res.sendFile(path.join(__dirname + '/dist/index.html'));
});

关于node.js - 具有组合前端和后端的应用程序未部署到 Heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56640486/

相关文章:

javascript - 检查数组是否有重复项,如果有,我需要改变原始项并删除最后一个重复项

ruby-on-rails - Heroku帮助权限被拒绝如何打开文件?

javascript - 平均JS : MissingSchemaError when runnig server

node.js - 在 MongoDB Server 3.0.15 上将 mongoose 版本从 3.8.22 升级到 4.3.2 后,findOneAndUpdate 不起作用

angular - 为什么打字工具会故意创建重复的打字集?

Heroku 预定作业返回 'command not found' 但使用耙子

python - Django 测试错误 "Permission denied to create database"- 使用 Heroku Postgres

javascript - 在 Express 中路由时,应用程序级和路由器级中间件有什么区别?

在 azure 上运行时 Node.js ECONNRESET 错误

node.js - 如何让 npm 启动 Angular 和 Node 服务器