Express API пытается обслуживать Publi c Файлы дает 404 - PullRequest
0 голосов
/ 17 апреля 2020

У меня сейчас есть настройка API, например ...

index. js

require('dotenv').config();

const index = require('./server');

const port = process.env.PORT || 5000;

index.listen(port, () => console.log(`Server is live at localhost:${port}`));

module.exports = index;

server / index. js

const express = require('express');
const routes = require('../routes');
const bodyParser = require('body-parser');
const helmet = require('helmet');
const morgan = require('morgan');
const path = require('path');

const server = express();

server.use(express.json());

// enhance your server security with Helmet
server.use(helmet());

// use bodyParser to parse server application/json content-type
server.use(bodyParser.json());
server.use(bodyParser.urlencoded({ extended: true }));

// log HTTP requests
server.use(morgan('combined'));

server.use(express.static(path.normalize(__dirname+'/public')));
server.use('/api', routes);

// Handle 404
server.use(function(req, res) {
  res.send('404: Page not Found', 404);
});

// Handle 500
server.use(function(error, req, res, next) {
  res.send('500: Internal Server Error', 500);
});

module.exports = server;

маршруты / индекс. js

const router = Router();

// enable all CORS requests
router.use(cors());
router.use(function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*"); // update to match the domain you will make the request from
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

router.get('/', (req, res) => res.send('Welcome to Timelapse Videos API'));

....

По какой-то причине мой каталог publi c всегда возвращает 404, и я не ' не знаю почему.
Если я добавлю это в маршруты / индекс. js:

router.get('/public', function(req, res) {
  res.sendFile(path.join(path.normalize(__dirname+'/../public'), 'index.html'));
});

Он вернет файл stati c, но проблема в том, что может быть номер из каталогов клиентов, которые имеют несколько изображений, которые я хочу вернуть.

Очевидно, есть проблема с моей настройкой, но я могу на всю жизнь увидеть, что происходит. Если у меня есть все API в индексе . js, и я не разделил маршрутизатор, похоже, он работает.

Любая помощь будет фантастической c, и если вам нужна дополнительная информация, пожалуйста, спросите .

Ответы [ 3 ]

0 голосов
/ 17 апреля 2020

Судя по вашему коду, папка publi c находится на root. Просто измените

server.use(express.static(path.normalize(__dirname+'/public')));

на

server.use(express.static(path.normalize(__dirname+'./../public')));
0 голосов
/ 18 апреля 2020

ОК, если нет, я нашел проблему, но нашел решение.

В файле server/index.js:

сервер / индекс. js

server.use(express.static(path.normalize(__dirname+'/public')));
server.use('/api', routes);

Если изменить верхнюю строку на:

server.use('/api', express.static(path.normalize(__dirname+'/public')));
server.use('/api', routes);

Нижняя строка переопределяет верхнюю строку (я думаю, это не сработало, так что мой мыслительный процесс ).

Теперь, если изменить его на это:

server.use('/api/media', express.static(path.normalize(__dirname+'/public')));
server.use('/api', routes);

Работает отлично.

Надеюсь, это поможет кому-то еще, так как я провел целый день на этом LOL.

0 голосов
/ 17 апреля 2020

Попробуйте изменить эту строку:

server.use(express.static(path.normalize(__dirname+'/public')));

Для:

server.use(express.static(__dirname + '/public'));

или

server.use(express.static('public'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...