Последняя статья оПриложение библиотеки шаблонов GoВ конце статьи оставляем вопрос, шаблон страницы пропускаетсяCDNцитируетсяBootStrapизcss,jsдокумент. До сих пор наши серверы не могут обслуживать клиентский статический файл и запрашивает ответный файл на диске сервера для клиента. Используется и настроенNginxСервер должен знатьNginxЕстественно поддерживает доступ к статическим ресурсам, поэтому стоит ли нам также использоватьNginxМожно ли реализовать обработку запросов статических файлов? На самом деле нет. В первой статье мы сказали, что «язык Go может построить и запустить HTTP-сервер с высокой степенью параллелизма, не полагаясь на какие-либо сторонние компоненты».Goлингвистическийnet/httpВ библиотеке реализована задача обработки запросов к статическим ресурсам.
Давайте на простом примере научимся использоватьnet/httpКак создать сервер статических ресурсов, а затем применить его к нашемуhttp_demoв проекте.
Исходный код каждой статьи из серии Go Web Programming содержит соответствующую версию программного пакета для справки. Ответ в публичном аккаунте
gohttp08Получить исходный код этой статьи
Создайте сервер статических ресурсов
мы создаем новыйmain.goХраните код для создания серверов статических ресурсов и запросов мониторинга и создавайте их в одном и том же каталоге одновременно.assets/cssа такжеassets/jsКаталог используется для хранения статических файлов, используемых шаблоном страницы из предыдущей статьи.
main.go
assets/
└── css
└── bootstrap.min.css
└── js
└── bootstrap.min.js
main.goКод в следующем:
package main
import "net/http"
func main() {
fs := http.FileServer(http.Dir("assets/"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
http.ListenAndServe(":8080", nil)
}
- Сначала мы используем
http.FileServerСоздать ответ с содержимым данной файловой системы на всеHTTPобработчик запросов. -
http.Handle("/static/", http.StripPrefix("/static/", fs))Разрешить файловому серверу использоватьassetsфайл ответа в каталогеURLпуть начинается с/static/все начиная сHTTPпросить. -
assetsустановлен в корневой каталог файловой системы файлового сервера, файловый сервер/staticначалоURLзапрос, поэтому нам нужно использоватьhttp.StripPrefix()ПучокstaticПрефикс можно убратьassetsЗапрошенный файл был найден в каталоге.
запустите программу, затем используйтеcURLзапросcssфайл и посмотреть, работает ли это.
$ go run main.go
$ curl -s http://localhost:8080/static/css/bootstrap.min.css
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
......
комбинироватьgorillia/muxИспользовать файловый сервер
В приведенном выше примере обработчик для файлового сервера зарегистрирован наnet/httpпредоставляется стандартная библиотекаServeMux(сервисный мультиплексор), мыhttp_demoДля поддержки сложной регистрации маршрута в проекте используетсяgorillia/muxСервисный мультиплексор, предоставляемый библиотекой. Они работают по-разному, поэтому применение файлового сервера в нашем проекте потребовало некоторой настройки.
Сначала мы ставимassetsКаталог Вся копия в корневой каталог проекта.
func RegisterRoutes(r *mux.Router) {
// serve static file request
fs := http.FileServer(http.Dir("assets/"))
serveFileHandler := http.StripPrefix("/static/", fs)
r.PathPrefix("/static/").Handler(serveFileHandler)
......
}
- использовать
router.PathPrefix("/static")Создать матч с/staticМаршруты для запросов префикса. - затем используйте
route.Handlerметод для регистрации файлового сервера в качестве обработчика, соответствующего маршруту (Handlerда*mux.Routeметод выше).
После регистрации файлового сервера обращаемся к предыдущему шаблону страницыCDNВверхjsа такжеcssФайл заменяется ссылкой на файл на собственном сервере.
<html lang="en">
<head>
......
<link href="/static/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
{{ template "nav" .}}
<div class="container">
{{template "content" .}}
</div> <!-- /container -->
<script src="/static/js/bootstrap.min.js"></script>
</body>
</html>
Затем перезапустите сервер и перейдите на предыдущую страницу.http:localhost:/view/index, чтобы убедиться, что наш сервер теперь может обслуживать запросы на статические файлы.
Стиль страницы нормальный, пока такой есть на сервереassetsФайлы в каталоге мы можемhttp://localhost:8000/static/*дорожкаURLдоступ к.
Исходный код, соответствующий сегодняшней статье, упакован и загружен, официальный аккаунт ответитgohttp08Получите ссылку для скачивания, скачайте и потренируйтесь. Если статья может вам помочь, не забудьте переслать ее, нажмите на нее и поделитесь ею с большим количеством людей. Подпишитесь на официальный аккаунт, чтобы получать обновления статей каждую неделю.
Предыдущий отзыв
Глубокое погружение в написание HTTP-серверов в Go
Использование маршрутизатора gorilla/mux
Перейти к веб-программированию — База данных приложений
Перейти к веб-программированию — глубокое обучение разбору HTTP-запросов
Перейти к веб-программированию — супер-подробное руководство по применению библиотеки шаблонов