2016-12-07 4 views
0

Я пытаюсь создать несколько спа/spw с golang и реагировать маршрутизатором как back-end, но я столкнулся с небольшой проблемой.Golang Одиночный сайт сервер сайта

React-router, похоже, основывается на идее, что любой «плохой» запрос на сервер (например,/path/dynamicRessourceHash) предоставляет страницу .html пользователя (указанная html-страница затем импортирует .js с сервера) а затем реагирует на маршрутизатор, анализирует путь и предоставляет приложению информацию, необходимую для выполнения запросов на выборку в фоновом режиме и доставки ресурсов пользователю.

Итак, какой стандартный способ настроить такой сервер, используя «net/http» от std, то есть к ресурсам сервера, обычно на предварительно сконфигурированных конечных точках, но обрабатывать все остальные конечные точки в качестве подстановочных знаков для одного (или нескольких) маршрутов?

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

/route1/whatever/someotherstuff? ... и т. Д. Независимо от того, что после второго «/» я хочу, чтобы пользователь обслуживался функцией обработчика для/route1/(Примечание , я не хочу, чтобы пользователь был перенаправлен, так как это подталкивает URL-адрес и, следовательно, маршрутизацию на стороне клиента).

ответ

2

В net/http вы можете использовать обработчик, чем служит / маршрут, чтобы вернуть 404 страницу, так как все неизвестные/незарегистрированные маршруты совпадают /.

http.HandleFunc("/", handler) 

... 

func handler(w http.ResponseWriter, r *http.Request) { 
    if r.URL.Path != "/" { 
     w.WriteHeader(http.StatusNotFound) 
     // Write custom 404 Page to w.Write() 
     return 
    } 
    // Handling for route/
} 

Вы также можете использовать другой мультиплексор HTTP, который поддерживает Not Found Handlers.

Например.

В httprouter вы установили httprouter.Router.NotFound

ИЛИ

В gorilla/mux вы установили mix.Router.NotFoundHandler

+0

«так как все неизвестный/незарегистрированный матч маршрутов /» ... Я понятия не имею, почему я не знал об этом oo, казалось, что я должен был научиться, путь, путь назад. – George

+0

'Обратите внимание, что поскольку шаблон, заканчивающийся в косой черте, обозначает корневое поддерево, шаблон«/»соответствует всем путям, не сопоставляемым с другими зарегистрированными шаблонами, а не только URL с Path ==«/».' Из [GoDoc] (https : //golang.org/pkg/net/http/#ServeMux) –