404 на ручное обновление - PullRequest
0 голосов
/ 11 июня 2018

Я создаю свое первое приложение MEAN, Angular 6. 0.2, Express 4.16.0

Файлы сгенерированы благодаря Angular CLI и генератору Express

Соединение с MongoDB отлично работаетна самом деле все работает НО ручное обновление ...

Согласно сообщениям, которые я уже видел, проблема должна исходить от маршрутизаторов (учитывая, что я хочу использовать Angular router).

Пока мой файл app.js имеет 2 маршрута:

var indexRouter = require('./routes/index'); // Express generated
var apiRouter = require('./routes/book');

, за которыми следуют ...

app.use(express.static(path.join(__dirname, 'public'))); // Express generated
app.use(express.static(path.join(__dirname, 'dist/myProjectFolder')));
app.use(express.static(path.join(__dirname, 'dist/myProjectFolder')));

И ...

app.use('/', indexRouter); // Express generated
app.use('/api, apiRouter);

После этого у меня есть обработчики ошибок по умолчанию (сгенерированные Express).

Маршрут индекса:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
    res.render('index', { title: 'Express' });
});

module.exports = router;

РЕДАКТИРОВАТЬ 01 - теперь появляется ошибка «Путь не определен» после примененияПервое предлагаемое решение.

РЕДАКТИРОВАТЬ 02 - Проблема решена благодаря предлагаемому решению (см. также комментарии).Однако router.get ('/ ', function ... нарушает доступ к данным (ошибка 200). Если у вас есть такая же проблема, используйте только определенные, такие как router.get ('/ poney', function)... Не / (если кто-то не знает, что делать, чтобы это исправить).

РЕДАКТИРОВАТЬ 3 - После дальнейшего изучения вы можете использовать «волшебный» маршрутизатор, используя

router.get(/^\/(?!api).*/, function(req, res) {
    req.sendFile(path.join(__dirname, '.. /path/to/your/index.html'));
});

1 Ответ

0 голосов
/ 11 июня 2018

Добавьте следующее к вашему маршрутизатору:

router.get('/', function(req, res) {
    res.sendFile(path.join(__dirname, '../index.html')); // make sure index is accesed, in my example the node server would be in a server folder, so I need to go back a directorie with ../ where index.html can be hit.
});
router.get('/*', function(req, res) {
     res.sendFile(path.join(__dirname, '../index.html'));
});

Если у вас есть другие URL-адреса, к которым вам нужен прямой доступ пользователей, например, к экранам администратора и входа, добавьте следующее:

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

Идея состоит в том, что вы отправите пользователя на страницу angulars index.html, где маршрутизатор сделает свое дело, вместо того, чтобы выполнять рендеринг непосредственно с узлом, а с angular это невозможно.

...