Поиск…


Вступление

Iron - популярная веб-среда для Rust (основанная на библиотеке Hyper более низкого уровня), которая продвигает идею расширяемости посредством промежуточного программного обеспечения . Большая часть функциональности, необходимой для создания полезного веб-сайта, может быть найдена в промежуточном программном обеспечении Iron, а не в самой библиотеке.

Простой сервер «Hello»

Этот пример отправляет жестко запрограммированный ответ пользователю при отправке запроса сервера.

extern crate iron;

use iron::prelude::*;
use iron::status;

// You can pass the handler as a function or a closure. In this
// case, we've chosen a function for clarity.
// Since we don't care about the request, we bind it to _.
fn handler(_: &mut Request) -> IronResult<Response> {
    Ok(Response::with((status::Ok, "Hello, Stack Overflow")))
}

fn main() {
    Iron::new(handler).http("localhost:1337").expect("Server failed!")
}

При создании нового Iron Server в этом примере expect чтобы поймать любые ошибки с более описательным сообщением об ошибке. В производственных приложениях обрабатывайте полученную ошибку (см. Документацию по http() ).

Установка железа

Добавьте эту зависимость в файл Cargo.toml :

[dependencies]
iron = "0.4.0"

Запустите cargo build и Cargo загрузит и установит указанную версию Iron.

Простая маршрутизация с использованием железа

Этот пример обеспечит базовую маршрутизацию через Iron.

Для начала вам нужно добавить зависимость Iron от вашего файла Cargo.toml .

[dependencies]
iron = "0.4.*"

Мы будем использовать собственную библиотеку Router от Iron. Для простоты проект Iron предоставляет эту библиотеку в составе библиотеки ядра Iron, что устраняет необходимость добавления ее в качестве отдельной зависимости. Затем мы ссылаемся как на библиотеку Iron, так и на библиотеку Router.

extern crate iron;
extern crate router;

Затем мы импортируем требуемые объекты, чтобы мы могли управлять маршрутизацией и возвращать ответ пользователю.

use iron::{Iron, Request, Response, IronResult};
use iron::status;
use router::{Router};

В этом примере мы сохраним это просто, написав логику маршрутизации в нашей функции main() . Конечно, по мере роста вашего приложения вы захотите разделить маршрутизацию, протоколирование, проблемы безопасности и другие области вашего веб-приложения. На данный момент это хорошая отправная точка.

fn main() {
    let mut router = Router::new();
    router.get("/", handler, "handler");
    router.get("/:query", query_handler, "query_handler");

Давайте перейдем к тому, чего мы достигли до сих пор. Наша программа в настоящее время создает новый объект Iron Router и прикрепляет два «обработчика» к двум типам URL-запроса: первый ( "/" ) является корнем нашего домена, а второй ( "/:query" ) - это любой путь под root.

Используя слово «запрос» с запятой перед словами «запрос», мы говорим Желу, чтобы взять эту часть пути URL как переменную и передать ее в наш обработчик.

Следующая строка кода - это то, как мы создаем экземпляр Iron, обозначая наш собственный объект router для управления нашими запросами URL. Домен и порт жестко закодированы в этом примере для простоты.

    Iron::new(router).http("localhost:3000").unwrap();

Затем мы объявляем две встроенные функции, которые являются нашими обработчиками, handler и query_handler . Они используются для демонстрации фиксированных URL-адресов и переменных URL-адресов.

Во второй функции мы берем переменную "query" из URL-адреса, хранящегося объектом запроса, и мы отправляем ее обратно пользователю в качестве ответа.

    fn handler(_: &mut Request) -> IronResult<Response> {
        Ok(Response::with((status::Ok, "OK")))
    }

    fn query_handler(req: &mut Request) -> IronResult<Response> {
        let ref query = req.extensions.get::<Router>()
            .unwrap().find("query").unwrap_or("/");
        Ok(Response::with((status::Ok, *query)))
    }
}

Если мы запустим этот пример, мы сможем просмотреть результат в веб-браузере на localhost:3000 . Корень домена должен отвечать "OK" , и все, что находится под корнем, должно повторить путь назад.

Следующим шагом в этом примере может быть разделение маршрутизации и обслуживание статических страниц.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow