Используйте статическое промежуточное ПО с Tink Web

Я хочу объявить 2 маршрута. Первый, "/api", будет предоставлять некоторые материалы REST, а другой, "/static", должен обслуживать статический контент.

Я попытался начать с примеров быстрого старта, но я не знаю, как это сделать.

import tink.http.containers.*;
import tink.http.Response;
import tink.web.routing.*;

class Server {
    static function main() {
        var container = new NodeContainer(8080);
        var router = new Router<Root>(new Root());
        container.run(function(req) {
            return router.route(Context.ofRequest(req))
                .recover(OutgoingResponse.reportError);
        });
    }
}

class Root {
    public function new() {}

    @:get('/')
    @:get('/$name')
    public function hello(name = 'World')
        return 'Hello, $name!';
}
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
4
0
178
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для /static вы можете использовать Static из tink_http_middleware.
Для /api вы можете использовать @:sub маршрут.

import tink.http.containers.*;
import tink.http.Handler;
import tink.http.Response;
import tink.http.middleware.Static;
import tink.web.routing.*;

class Server {
    static function main() {
        var container = new NodeContainer(8080);
        var router = new Router<Api>(new Api());
        var handler:Handler = req -> router.route(Context.ofRequest(req)).recover(OutgoingResponse.reportError);
        container.run(handler.applyMiddleware(new Static('public_html', '/static')));
    }
}

class Api {
    @:sub public var api:Root = new Root();
}

class Root {
    public function new() {}

    @:get('/')
    @:get('/$name')
    public function hello(name = 'World')
        return 'Hello, $name!';
}

Теперь у меня ошибка компиляции: C:\HaxeToolkit\haxe\lib\tink_http_middleware/0,1,0/src/tink/‌​http/middleware/Stat‌​ic.hx:79: символы 12-27: нет поддерживается. пока я использую -lib hxnodejs

damoebius 23.05.2019 13:42
Ответ принят как подходящий

Прежде всего, мне пришлось использовать git-версию tink_http_middleware и asys.

-lib tink_web
-lib hxnodejs
-lib tink_http_middleware:git:https://github.com/haxetink/tink_http_middleware.git
-lib asys:git:https://github.com/benmerckx/asys.git
-main server.Api
-js www/api/api.js

Далее, ответ @KevinResoL был очень полезен, я изменил только одну вещь. staticMiddleware.apply(обработчик)

package server;

import tink.http.Handler;
import tink.http.middleware.Static;
import tink.http.containers.*;
import tink.http.Response;
import tink.web.routing.*;

class Api {
    public static function main() {

        var container = new NodeContainer(8080);
        var router = new Router<ApiRoute>(new ApiRoute());
        var staticMiddleware = new Static("..","/");
        var handler:Handler = req -> router.route(Context.ofRequest(req)).recover(OutgoingResponse.reportError);
        container.run(staticMiddleware.apply(handler));
    }
}

class ApiRoute {
    public function new() { }

    @:sub public var api:Root = new Root();
}

class Root {

    public function new() { }

    @:get('/')
    @:get('/$name')
    public function serve(name = 'index.html')
        return 'Hello, $name!';
}

Другие вопросы по теме