NodeJS Express API возвращает только index. html файл на производстве? - PullRequest
0 голосов
/ 16 июня 2020

Мой исходный вопрос: Как настроить VueJS маршруты и NodeJS Express маршруты API?

Я получил ответ, что если Serving VueJS Builds через Express. js в режиме истории вопрос не решает мою проблему, мне нужно задать новый вопрос, поэтому я здесь.

Проблема:
NodeJS (на базе express) API всегда возвращает index.html - несмотря ни на что.

Примечания
- Отлично работает на локальном
- API возвращает файл index.html только на производстве

Я очень запутался, что может вызвать это?

Я также помещаю свои Nginx конфигурации сюда, так как я думаю, что в нем есть что сделайте мой производственный сервер, поскольку проблема возникает только там:

server {
    root /var/www/example.com/client/dist;
    index index.html index.htm index.nginx-debian.html;

    server_name example.com www.example.com;

    location / {
        try_files $uri $uri/ /index.html;

        proxy_pass http://localhost:1234;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

NodeJS сервер:

// server.js
const express = require("express");
const app = express();
const history = require("connect-history-api-fallback");
const cors = require("cors");
const bodyParser = require("body-parser");
const path = require("path");
const http = require("http");
const server = http.createServer(app);

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

app.get(`/user`, async (req, res){
  // Also, I have tested with res.json AND setting the content type manually
  return res.send({ test: 123 });
});

app.use(history());
app.use(express.static(path.join(__dirname, "../client/dist")));
app.get(`/`, (req, res) => {
  res.sendFile(path.join(__dirname, "../client/dist", "index.html"));
});

server.listen(1234);

Проблема:
NodeJS (с питанием by express) API всегда возвращает index.html - не смотря ни на что.

1 Ответ

0 голосов
/ 16 июня 2020

В итоге я разместил все конечные точки API под префиксом /api и изменил конфигурации Nginx на что-то вроде этого:

location / {
    try_files $uri $uri/ /index.html;

    location /api {
        proxy_pass http://localhost:1234;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Итак, теперь я использую /api/user вместо /user работает как положено. Больше не возвращает файл index.html.

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