Ответ сервера узла - HTML после добавления ловушки, чтобы позволить реагировать на маршрутизаторе - PullRequest
0 голосов
/ 03 октября 2019

Я занимаюсь разработкой бэкэнда для узлов и реагирую на интерфейсное веб-приложение в течение пары месяцев. Все работает нормально, когда я запускаю сервер через nodemon и интерфейс с npm start. Но теперь, когда я готовлюсь к размещению альфа-версии и запускаю 'npm run build', у меня возникают проблемы.

Похоже, что это происходит из-за взаимодействия доступа к приложению через порт сервера и маршрутизатор реакции. Я добавил на свой сервер универсальную конечную точку app.get ('/ *' ...), чтобы позволить реагирующему маршрутизатору работать. Так что теперь, когда клиент запрашивает данные, ответом является HTML, а не массив, который мне нужен.

Мне кажется, что есть простое решение, но я просто пока его не вижу. Я решил использовать HashRouter вместо BrowserRouter, но, к сожалению, я не могу использовать это, потому что я использую Active Directory MSAL для входа в систему.

server / index.js

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors')
require('dotenv').config();
const massive = require('massive');
const session = require("express-session");
const morgan = require('morgan');
const path = require('path');
const ctrl = require(`./controllers/controller.js`);

//Middleware
const app = express();
app.use(bodyParser.json());
app.use(cors());
app.use(express.static(__dirname + './../build'));
app.use(morgan('dev'));

//Connection to Azure DB
massive(process.env.CONNECTION_STRING)
.then(db => {
    console.log('Connected to Azure PostgreSQL Database')
    app.set('db', db)
}).catch(err=>console.log(err))

app.use(session({
    secret: process.env.SESSION_SECRET, 
    cookie: { maxAge: 60000 },
    resave: false,
    saveUninitialized: true
   })); 
 
//Endpoints
app.get('/*', function(req, res) {
    res.sendFile(path.join(__dirname, './../build/index.html'), function(err) {
      if (err) {
        res.status(500).send(err)
      }
    })
  })

app.get('/getallemployees/', ctrl.getAllEmployees)

app.listen(8080, () => console.log(`Listening on ${8080}`));

1 Ответ

0 голосов
/ 03 октября 2019

Поместите эту конечную точку перехвата после всех остальных, которые возвращают данные.

//Endpoints
app.get('/getallemployees/', ctrl.getAllEmployees)

app.get('/*', function(req, res) {
   res.sendFile(path.join(__dirname, './../build/index.html'), function(err) {
      if (err) {
        res.status(500).send(err)
      }
    })
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...