2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
42#include "express/middleware/StaticMiddleware.h"
44#include "core/socket/stream/SocketConnection.h"
45#include "web/http/server/SocketContext.h"
47#ifndef DOXYGEN_SHOULD_SKIP_THIS
49#include "log/Logger.h"
55namespace express::middleware {
57 StaticMiddleware::StaticMiddleware(
const std::string& root)
59 , index(
"index.html") {
64 [&stdHeaders =
this->stdHeaders, &stdCookies =
this->stdCookies, &connectionState =
this->defaultConnectionState]
MIDDLEWARE(
69 res->
set("Connection", "close");
71 res->
set("Connection", "keep-alive");
75 for (
auto& [value, options] : stdCookies) {
80 [&index =
this->index]
MIDDLEWARE(req, res, next) {
81 if (req->
url.ends_with(
"/")) {
84 <<
" Express StaticMiddleware Redirecting: " << req->
url <<
" -> " << req->
url + index;
97 <<
" Express StaticMiddleware: GET " << req->
url +
" -> " << root + req->
url;
100 << req->
url +
" -> " << root + req->
url;
108 class StaticMiddleware& StaticMiddleware::setIndex(
const std::string& index) {
114 class StaticMiddleware& StaticMiddleware::clearStdHeaders() {
115 this->stdHeaders.clear();
120 class StaticMiddleware& StaticMiddleware::setStdHeaders(
const std::map<std::string, std::string>& stdHeaders) {
121 this->stdHeaders = stdHeaders;
126 class StaticMiddleware& StaticMiddleware::appendStdHeaders(
const std::map<std::string, std::string>& stdHeaders) {
127 this->stdHeaders.insert(stdHeaders.begin(), stdHeaders.end());
132 class StaticMiddleware& StaticMiddleware::appendStdHeaders(
const std::string& field,
const std::string& value) {
133 this->stdHeaders[field] = value;
138 class StaticMiddleware& StaticMiddleware::appendStdCookie(
const std::string& name,
139 const std::string& value,
140 const std::map<std::string, std::string>& options) {
146 class StaticMiddleware& StaticMiddleware::afterResponse(web::http::
ConnectionState connectionState) {
147 this->defaultConnectionState = connectionState;
152 class StaticMiddleware& StaticMiddleware::instance(
const std::string& root) {
154 static std::map<
const std::string, std::shared_ptr<
class StaticMiddleware>> staticMiddlewares;
156 if (!staticMiddlewares.contains(root)) {
157 staticMiddlewares[root] = std::shared_ptr<StaticMiddleware>(
new StaticMiddleware(root));
160 return *staticMiddlewares[root];
164 class StaticMiddleware& StaticMiddleware(
const std::string& root) {
165 return StaticMiddleware::instance(root);
#define APPLICATION(req, res)
#define MIDDLEWARE(req, res, next)
const std::string & getConnectionName() const
SocketConnection * getSocketConnection() const
void operator()(const std::string &how="") const
Response & cookie(const std::string &name, const std::string &value, const std::map< std::string, std::string > &options={})
void sendFile(const std::string &file, const std::function< void(int)> &callback)
Response & set(const std::string &field, const std::string &value, bool overwrite=true)
void send(const std::string &chunk)
void redirect(int state, const std::string &loc)
Response & status(int status)
Response & set(const std::map< std::string, std::string > &headers, bool overwrite=true)
web::http::server::SocketContext * getSocketContext() const
void sendStatus(int state)
const Router & setStrictRouting(bool strictRouting=true) const
Route & get(const Router &router) const
const std::map< std::string, std::string > & getOptions() const
CookieOptions(const std::string &value, const std::map< std::string, std::string > &options)
const std::string & getValue() const