Как исправить ошибку обновления с помощью Echo и Angular - PullRequest
0 голосов
/ 25 декабря 2018

Я настраиваю веб-сервер с Go (используя Echo) в качестве бэкэнда и Angular 6 в качестве внешнего интерфейса.Что я делаю, так это создаю простое приложение, используя Angular-cli 'ng new my-app', добавляю компонент helloworld и маршрут '/ helloworld', а затем встраиваю его в производство с помощью 'ng build --prod', которое выдает как 'distпапка.Структура папки:

dist
├── assets
│   ├── icons
│   └── logo.png
├── favicon.ico
├── index.html
├── main.js
├── polyfills.js
├── runtime.js
└── styles.css

Затем я должен Go отправить статические файлы в эту папку 'dist' со следующим кодом main.go

func main() {
    e := echo.New()
    e.Static("/", "dist")
    e.File("/", "dist/index.html")
    e.Start(":3000")
}

Теперь, когда я использую браузер и перехожу на'localhost: 3000 /', тогда страница будет отображаться правильно, я могу перемещаться по href благодаря угловой маршрутизации, например: 'localhost: 3000 / home', страница будет отображаться правильно, но если я попытаюсь обновить ее, то Echoвернуть содержимое страницы, которое показывает:

{"message": "Not Found"}

Я знаю, что могу настроить маршрут вручную следующим образом:

e.File("/home","dist/index.html")

Однакоесли у меня есть намного больше маршрутов, то это довольно хлопотно.

Что мне нужно, так это то, что любой маршрут, который не определен для Echo, будет отображен в 'index.html'.Я попытался с:

e.File("/*", "dist/index.html")

и

e.GET("/*", func(c echo.Context) 
    return c.File("dist/index.html")
})

, но затем я получаю пустую страницу с ошибкой

"Uncaught SyntaxError: Unexpected token <  " 

со всеми 3 файлами main.js,polyfill.js и runtime.js

Я новичок в Echo, поэтому не знаю, как это сделать.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

@ Ответ Seaskyways отлично работает для меня, но мне также удалось найти другое решение после более подробного изучения Echo.У Echo есть NotFoundHandler, который обрабатывает все неизвестные маршруты, поэтому я просто заставляю его возвращать «index.html» каждый раз, когда запрашиваются неопределенные маршруты.Вот мой код:

echo.NotFoundHandler = func(c echo.Context) 
    return c.File("dist/index.html")
}
e := echo.New()
e.Static("/", "dist")
e.Start(":3000")

Я не уверен, что это хороший способ сделать это, но это другой вариант для тех, у кого такая же проблема, как у меня

0 голосов
/ 25 декабря 2018

Проблема не связана напрямую с Echo.Angular выполняет маршрутизацию так, что он НЕ запрашивает страницу с сервера.Он изменяет URL-адрес без фактического запроса другой страницы с сервера.

Таким образом, когда вы переходите в «/ home», а затем обновляетесь, ваш браузер пытается связаться с сервером и запрашивает «/ home» (в отличие от первого раза, браузер запрашивает «/», чтоотображается в "dist / index.html")."/ home" не найден или не определен в маршрутизации Echo.Следовательно, вы получаете сообщение Not Found.

Я рекомендую вам сделать следующее в отношении маршрутизации

e.Static("/dist", "dist")
e.File("/*", "dist/index.html")
e.Start(":3000")

И внутри вашего index.html добавьте "/ dist" перед URL-адресами.запрошенных ресурсов.

...