QHttpServerRouter Class

Provides functions to bind a path to a ViewHandler . 更多...

头: #include <QHttpServerRouter>
CMake: find_package(Qt6 REQUIRED COMPONENTS HttpServer)
target_link_libraries(mytarget PRIVATE Qt6::HttpServer)
qmake: QT += httpserver
Since: Qt 6.4

公共函数

QHttpServerRouter (QAbstractHttpServer * server )
~QHttpServerRouter ()
bool addConverter (QAnyStringView regexp )
void addConverter (QMetaType metaType , QAnyStringView regexp )
QHttpServerRouterRule * addRule (std::unique_ptr<QHttpServerRouterRule> rule )
void clearConverters ()
QHash<QMetaType, QString> converters () &&
const QHash<QMetaType, QString> & converters () const &
bool handleRequest (const QHttpServerRequest & request , QHttpServerResponder & responder ) const
void removeConverter (QMetaType metaType )

详细描述

QHttpServerRouter is a rule-based system for routing HTTP requests to their appropriate handlers. You can add QHttpServerRouterRule instances, which define a request path and its corresponding handler.

Variable parts in the route can be specified with placeholders ( "<arg>" ) in the request path, but it is not needed at the end. The handler receives the matched values as a QRegularExpressionMatch . The arguments can be of any type for which a converter is available. The handler creation can be simplified with QHttpServerRouterRule::bindCaptured ().

注意: A QHttpServerRouter instance must not be modifed by its rules.

注意: This is a low-level routing API for an HTTP server.

Minimal example:

auto pageView = [] (const quint64 page) {
    qDebug() << "page" << page;
};
using ViewHandler = decltype(pageView);
QHttpServerRouter router;
// register callback pageView on request "/page/<number>"
// for example: "/page/10", "/page/15"
router.addRule<ViewHandler>(
    new QHttpServerRouterRule("/page/", [=] (QRegularExpressionMatch &match,
                                             const QHttpServerRequest &,
                                             QHttpServerResponder &&) {
    auto boundView = QHttpServerRouterRule::bindCaptured(pageView, match);
    // it calls pageView
    boundView();
}));
					

成员函数文档编制

QHash < QMetaType , QString > QHttpServerRouter:: converters () &&

const QHash < QMetaType , QString > &QHttpServerRouter:: converters () const &

Returns a map of converter types and regular expressions that are registered with this QHttpServerRouter . These are the types that can be used in path patterns of QHttpServerRouterRules .

The following converters are available by default:

常量 描述
QMetaType::Int
QMetaType::Long
QMetaType::LongLong
QMetaType::Short
QMetaType::UInt
QMetaType::ULong
QMetaType::ULongLong
QMetaType::UShort
QMetaType::Double
QMetaType::Float
QMetaType::QString
QMetaType::QByteArray
QMetaType::QUrl
QMetaType::Void An empty converter.

另请参阅 addConverter and clearConverters .

QHttpServerRouter:: QHttpServerRouter ( QAbstractHttpServer * server )

Creates a QHttpServerRouter object with default converters.

另请参阅 converters .

[noexcept] QHttpServerRouter:: ~QHttpServerRouter ()

销毁 QHttpServerRouter .

template <typename Type> bool QHttpServerRouter:: addConverter ( QAnyStringView regexp )

Adds a new converter for Type that can be parsed with regexp ,并返回 true if this was successful, otherwise returns false . If successful, the registered type can be used as argument in handlers for QHttpServerRouterRule . The regular expression will be used to parse the path pattern of the rule.

If there is already a converter of type Type , that converter's regexp is replaced with regexp .

Custom converters can extend the available type conversions through the QMetaType system.

Define a class with a QString 构造函数:

struct CustomArg {
    int data = 10;
    CustomArg() {} ;
    CustomArg(const QString &urlArg) : data(urlArg.toInt()) {}
};
			

To use a custom type with the HTTP server , register it using this function and define a route handler using the new type:

server.router()->addConverter<CustomArg>(u"[+-]?\\d+");
server.route("/customTest/<arg>", [] (const CustomArg custom) { return QString::number(custom.data); });
			

另请参阅 converters and clearConverters .

void QHttpServerRouter:: addConverter ( QMetaType metaType , QAnyStringView regexp )

Adds a new converter for metaType that can be parsed with regexp . Having a converter for a metaType enables to use this type in a path pattern of a QHttpServerRouterRule . The regular expression is used to parse parameters of type metaType from the path pattern.

If there is already a converter of type metaType , that converter's regexp is replaced with regexp .

另请参阅 converters and clearConverters .

template <typename ViewHandler, typename ViewTraits = QHttpServerRouterViewTraits<ViewHandler>> QHttpServerRouterRule *QHttpServerRouter:: addRule ( std::unique_ptr < QHttpServerRouterRule > rule )

Adds a new rule to the router.

Returns a pointer to the new rule if successful; otherwise returns nullptr .

Inside addRule, we determine ViewHandler arguments and generate a list of their QMetaType::Type ids. Then we parse the path and replace each "<arg>" with a regexp for its type from the list.

提供的 rule must not modify the QHttpServerRouter 实例。

QHttpServerRouter router;
using ViewHandler = decltype([] (const QString &page, const quint32 num) { });
auto rule = std::make_unique<QHttpServerRouterRule>(
    "/<arg>/<arg>/log",
    [] (QRegularExpressionMatch &match,
        const QHttpServerRequest &request,
        QHttpServerResponder &&responder) {
});
router.addRule<ViewHandler>(std::move(rule));
			

void QHttpServerRouter:: clearConverters ()

Removes all converters.

注意: clearConverters() does not set up default converters.

另请参阅 converters and addConverter .

bool QHttpServerRouter:: handleRequest (const QHttpServerRequest & request , QHttpServerResponder & responder ) const

Handles each new request for the HTTP server using responder .

Iterates through the list of rules to find the first that matches, then executes this rule, returning true 。返回 false if no rule matches the request.

void QHttpServerRouter:: removeConverter ( QMetaType metaType )

Removes the converter for type metaType .

另请参阅 addConverter .

内容

  1. 公共函数

  2. 详细描述