Приложение Vue + Express на героку, не использующее SPA в серверной / публичной папке - PullRequest
0 голосов
/ 18 июня 2019

Мое приложение работает на heroku, и маршруты отправляют мне файлы JSON, но мне нужно использовать SPA, который находится в моей папке ./server/public, как index.html. Когда я открываю приложение heroku, оно отправляет мне файл JSON, который отправляется по маршруту "/", но мне нужно, чтобы он использовал Vue SPA, из-за того, что я сделал в своем клиенте переднего плана, если по какой-то причине вы переходите на маршрут, который не существует, он перенаправляет меня на мой маршрут "/ forum" с клиентским интерфейсом, но любой другой маршрут, который существует, не будет работать, он будет продолжать отправлять JSON этого маршрута.

Приложение / server.js

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const expressValidator = require("express-validator");
const flash = require('connect-flash');
const mongoose = require('mongoose');
const cors = require("cors");
const config = require("./config/database");
if(process.env.NODE_ENV !== "production") require('dotenv').config();

mongoose.connect(config.database, { useNewUrlParser: true, useFindAndModify: false });

let db = mongoose.connection;

db.once("open", () => {
    console.log("Connected to MongoDB Atlas");
});

db.on("error", (err) => {
    console.log(err);
});

const app = express();

//Body-parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use(cors());
app.use(expressValidator());
app.use(flash());
app.use(cors());

require("./passport")

//Routes
const home = require("./routes/home.js");
const forum = require('./routes/forum.js');
const ranking = require('./routes/ranking.js');
const profile = require('./routes/profile.js');

// Routing
app.use("/", home);
app.use("/forum", forum);
app.use("/profile", profile);
app.use("/ranking", ranking);

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

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

1 Ответ

0 голосов
/ 18 июня 2019

Если вы разделяете внешний и внутренний интерфейсы с помощью Vue и Express, вам, вероятно, следует статически собрать и разместить часть Vue, а затем запустить Express на Heroku.

Здесь - это руководство по развертыванию вашего экспресс-приложения, а затем вы создаете и развертываете свою статическую страницу Vue, здесь - это документы для развертывания Vue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...