Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
128 commits
Select commit Hold shift + click to select a range
d67ec8f
isolate core revamp
prasannavl May 13, 2019
a50668f
Merge pull request #219 from prasannavl/2019_05_tide_isolate_core
prasannavl May 15, 2019
a376d60
Fix example link in readme
daleione May 15, 2019
c3066f7
Merge pull request #221 from daleione/readme
prasannavl May 15, 2019
be577ef
fix broken links in readme
prasannavl May 15, 2019
f4473d6
Rename `serve` to `run`, add asynchronous `serve`
tirr-c May 15, 2019
6078fc4
Run rustfmt
tirr-c May 15, 2019
059a8f8
add tide-compression crate
fairingrey May 15, 2019
77dd922
Merge pull request #203 from tirr-c/serve-future
fairingrey May 15, 2019
250c2b9
Merge remote-tracking branch 'upstream/master' into compression
fairingrey May 15, 2019
80f0af6
use run instead of serve
fairingrey May 15, 2019
962fddc
Update tide-compression/README.md
fairingrey May 15, 2019
b19eb2e
Check example in readme compiles during testing
Nemo157 May 15, 2019
3af12d9
Remove #[allow(unused_mut)]
taiki-e May 16, 2019
f7ba837
Merge pull request #229 from Nemo157/test-readme
fairingrey May 16, 2019
dac4493
Remove #[allow(unused_mut)] (#231)
fairingrey May 16, 2019
29cdf99
Merge remote-tracking branch 'upstream/master' into compression
fairingrey May 16, 2019
d64d063
Middleware-based compression and decompression (#194)
fairingrey May 16, 2019
4531977
Improve curl command consistency
pickfire May 17, 2019
bdc9fdf
Improve curl command consistency (#233)
fairingrey May 17, 2019
77b3a1c
Split tide into smaller crates (#220)
May 19, 2019
85b85e9
Update travis configuration (#228)
Nemo157 May 19, 2019
e7a7dac
add tide-log
prasannavl May 20, 2019
1106a85
change deny attr to warn; consistent enforcement for all crates
prasannavl May 20, 2019
2878aba
Add ResultDynErrExt (#216)
updogliu May 20, 2019
4d6da98
remove remaining deny attrs
prasannavl May 20, 2019
011d0db
rename trait ExtractForms to ContextExt (#239)
fairingrey May 20, 2019
6637aaf
remove async box macro
yoshuawuyts May 20, 2019
e7703fd
rustfmt
yoshuawuyts May 20, 2019
4806db4
Fix broken links in readme (#242)
daleione May 20, 2019
114c17c
Sweep the cache before uploading it (#246)
Nemo157 May 20, 2019
0d8caa9
move tide/ to src/
yoshuawuyts May 20, 2019
e11f71a
fix examples
yoshuawuyts May 20, 2019
15eee77
fix tests
yoshuawuyts May 21, 2019
7a8a33b
remove certificate
yoshuawuyts May 21, 2019
3799be6
remove async box macro (#245)
fairingrey May 21, 2019
e30f184
remove `--manifest-path`
fairingrey May 21, 2019
731e27a
Merge branch 'master' into run-examples
fairingrey May 21, 2019
5ec263e
Bring tide to root, and allow `cargo run --example` (#247)
fairingrey May 21, 2019
4df808d
add tide-log (#222)
prasannavl May 21, 2019
d664194
remove certificate file (#248)
fairingrey May 21, 2019
4bd12ed
Merge branch 'master' into 2019_change_quality_enforcement
fairingrey May 21, 2019
79e37d8
Adjust code quality enforcement (#241)
fairingrey May 21, 2019
a9fbc58
feat: add type annotation
k-nasa May 21, 2019
424c605
fix clippy warnings (#249)
fairingrey May 21, 2019
e45a7e5
Update .travis.yml
fairingrey May 21, 2019
1a93fc2
Update juniper requirement from 0.11.1 to 0.12.0
dependabot-support May 21, 2019
8b06916
isolate tide-headers, tide-slog; better; improve loggers
prasannavl May 21, 2019
225a43d
add logging examples
prasannavl May 21, 2019
9e96166
Merge branch 'master' of ssh://github.com/rustasync/tide
prasannavl May 21, 2019
7d9e136
cargo fmt
prasannavl May 21, 2019
8aac219
add tide dev-dep to all crates
prasannavl May 21, 2019
f41754b
fixup manifest documentation links
prasannavl May 21, 2019
b47e780
pub use ResultDynErrExt in tide::error
updogliu May 21, 2019
476d75b
Update Cargo.toml
fairingrey May 21, 2019
f354835
capitalize Tide in crate desc
fairingrey May 21, 2019
82e990c
Core revamp part 2 (#252)
fairingrey May 21, 2019
d401db3
pub use ResultDynErrExt in tide::error (#253)
fairingrey May 21, 2019
34cb65c
refactor tide-forms, tide-querystring
prasannavl May 21, 2019
5c483ba
Fix the documentation for wildcards for path definitions to match imp…
May 21, 2019
60834dc
fix err_fmt macro
prasannavl May 21, 2019
d187372
fix querystring tests
prasannavl May 21, 2019
676132e
add basic crate level doc
prasannavl May 21, 2019
d15bb7a
cargo fmt
prasannavl May 21, 2019
c121673
Fix links in README
richard-uk1 May 21, 2019
8ac86ec
fix tide-slog keywords limit
prasannavl May 21, 2019
68c6cb7
Fix links in README (#256)
prasannavl May 21, 2019
ce2167a
Rename Context<Data> to Context<State>
Maniarr May 22, 2019
8b667fe
Merge pull request #260 from Maniarr/appdata_rename
fairingrey May 22, 2019
4d4ef6c
Merge branch 'master' into core_revamp_3
fairingrey May 22, 2019
32709f5
Merge pull request #254 from gameldar/master
fairingrey May 22, 2019
9fbd88f
propagate hyper error on serve failure
fairingrey May 22, 2019
d18c369
Core revamp part 3 (#255)
fairingrey May 23, 2019
3a0e592
Merge pull request #261 from fairingrey/propagate_hyper_error
fairingrey May 23, 2019
279e0f0
Add doc comment (#250)
k-nasa May 27, 2019
7c2046a
add test that checks for empty body on HEAD req (#179)
fairingrey Jun 5, 2019
2504828
Add middleware for catching panics (#265)
Nemo157 Jun 5, 2019
1fb4ab3
Implemented CORS header handler middleware (#262)
k-nasa Jun 6, 2019
4486ba0
Add templating example with tera (#267)
milesgranger Jun 6, 2019
a803151
Update lib.rs
fairingrey Jun 6, 2019
994ee1c
reduce redundancy in docs and make consistent (#272)
fairingrey Jun 7, 2019
ae89265
Workaround for issue #278: works around Rust internal compiler error.
realcr Jun 19, 2019
f0d667d
Added a comment explaining the workaround for solving issue 278.
realcr Jun 21, 2019
1505f91
Bumped rust version in .travis.yml to nightly-2019-06-02.
realcr Jun 21, 2019
4bc805b
cargo fmt
realcr Jun 21, 2019
e4fcb6c
Merge pull request #279 from realcr/master
tirr-c Jun 24, 2019
8f80e0c
Core isolation - part 4 (#258)
prasannavl Jun 24, 2019
2e063ae
Add example running on top of runtime (#283)
Nemo157 Jul 4, 2019
a74cc28
Disable default-features everywhere (#282)
Nemo157 Jul 4, 2019
d17b4f0
Update for futures alpha.17 (#286)
Nemo157 Jul 4, 2019
25de413
Rewrite tide-slog to setup a per-request logger instance and support …
Nemo157 May 26, 2019
36c15fd
Add async_closure feature gate where needed (#288)
spastorino Jul 9, 2019
e63086a
Remove usage of async_closure
taiki-e Jul 15, 2019
ff9731c
Remove usage of async_closure (#289)
fairingrey Jul 15, 2019
3eb630f
Set StatusCode for an empty response from `()` to `204`
mehcode Jul 2, 2019
eed3041
Merge pull request #285 from mehcode/patch-1
Jul 16, 2019
7e2adb3
Add doc example showing query parameter extraction
phansch Jul 18, 2019
f269183
Merge pull request #291 from phansch/query_pairs_example
Jul 18, 2019
b77a242
Update juniper requirement from 0.12.0 to 0.13.0
dependabot-preview[bot] Jul 22, 2019
9a9b10a
Cors middleware extension (#275)
k-nasa Jul 22, 2019
3a7601f
Update percent-encoding requirement from 1.0.1 to 2.0.0
dependabot-preview[bot] Jul 24, 2019
dfef176
remove http-service patches (#297)
yoshuawuyts Jul 26, 2019
738c870
Update serde_urlencoded requirement from 0.5.5 to 0.6.0
dependabot-preview[bot] Jul 31, 2019
dd0bcfe
querystring: replace dependency serde_urlencoded with serde_qs (#299)
Aug 5, 2019
7dfb4b8
Fix clippy error in static file example
dvic Aug 9, 2019
d0b1ed8
Merge pull request #303 from dvic/patch-1
Aug 9, 2019
702e0f4
removed existential_type feature
ibaryshnikov Aug 9, 2019
a407732
updated route-recognizer to 0.1.13
ibaryshnikov Aug 13, 2019
25581ae
added patch.crates-io for runtime
ibaryshnikov Aug 16, 2019
c815f72
updated toolchain to nightly-2019-07-29
ibaryshnikov Aug 16, 2019
cd201eb
updated toolchain to nightly-2019-07-31 because of missing rustfmt
ibaryshnikov Aug 16, 2019
e5730ca
Merge pull request #301 from ibaryshnikov/master
ibaryshnikov Aug 16, 2019
369faff
Fix tide-slog docs.rs metadata
Nemo157 Aug 21, 2019
2c15f83
Merge pull request #310 from rustasync/tide-slog-docrs
Nemo157 Aug 21, 2019
23b8719
Upgrade mime_guess to version 2.0.1 (#308)
Aug 21, 2019
958f2a7
Bump http-service dependency in tide-panic, set CI to nightly-2019-08…
vorot93 Aug 21, 2019
c41ed84
Update slog-stdlog to 4.0 (#314)
taiki-e Aug 21, 2019
336c6ef
CORS middleware: no origin header should be treated as an empty origi…
Aug 25, 2019
f56a27d
CORS middleware: update test
Aug 25, 2019
87807a7
CORS middleware: fix clippy
Aug 25, 2019
67e9191
Merge pull request #318 from Ivshti/master
tirr-c Aug 26, 2019
af0b900
updated runtime to 0.3.0-alpha.7, removed patch for crates.io (#319)
ibaryshnikov Aug 30, 2019
e38eb38
Update env_logger requirement from 0.6.1 to 0.7.0
dependabot-preview[bot] Sep 24, 2019
8281f38
Update juniper requirement from 0.13.0 to 0.14.0
dependabot-preview[bot] Sep 30, 2019
de9f51e
Port to Tokio 0.2
vorot93 Aug 16, 2019
a69d98d
Remove external docs so as to build on beta
vorot93 Oct 2, 2019
9f9bdd6
Remove feature flag
vorot93 Oct 7, 2019
2a9dede
Cut the runtime example for now
vorot93 Oct 7, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ Repository.

- [Code of Conduct](#code-of-conduct)
- [Bad Actors](#bad-actors)
- [Developer Certificate of Origin](#developer-certificate-of-origin)

## Code of Conduct
The project has a [Code of Conduct](./CODE_OF_CONDUCT.md) that *all*
Expand Down Expand Up @@ -54,10 +53,3 @@ contributors the benefit of the doubt and having a sincere willingness to admit
that you *might* be wrong is critical for any successful open collaboration.

Don't be a bad actor.

## Developer Certificate of Origin
All contributors must read and agree to the [Developer Certificate of
Origin (DCO)](../CERTIFICATE).

The DCO allows us to accept contributions from people to the project, similarly
to how a license allows us to distribute our code.
67 changes: 55 additions & 12 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,56 @@
language: rust
rust:
- nightly-2019-05-09

before_script: |
rustup component add rustfmt clippy
script: |
cargo fmt --all -- --check &&
cargo clippy --all -- -D clippy::all &&
cargo build --no-default-features --verbose &&
cargo build --all --verbose &&
cargo test --all --verbose
cache: cargo
rust: beta

before_script:
- >
[[ "$(cargo-sweep --version)" == "cargo-sweep 0.4.1" ]]
|| cargo install cargo-sweep
- cargo sweep --stamp

before_cache:
- cargo sweep --file

matrix:
include:
- name: cargo doc
env: [CACHE_NAME=docs]
script:
- RUSTDOCFLAGS=-Dwarnings cargo doc
--all --all-features
--exclude tide
--no-deps

- name: cargo fmt
cache: false
before_script: []
install:
- rustup component add rustfmt
script:
- cargo fmt --all -- --check

- name: cargo clippy
env: [CACHE_NAME=clippy]
install:
- rustup component add clippy
script:
- cargo clippy
--all --all-targets
-- -Dwarnings

- name: cargo build --no-default-features
env: [CACHE_NAME=no-default-features]
script:
- cargo build
--manifest-path tide-core/Cargo.toml
--no-default-features
- cargo build
--no-default-features

- name: cargo test
script:
- cargo test --all --verbose

- name: cargo test --all-features
script:
- cargo test --all-features
- cargo test --manifest-path tide-slog/Cargo.toml --all-features
37 changes: 0 additions & 37 deletions CERTIFICATE

This file was deleted.

87 changes: 48 additions & 39 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,50 +18,59 @@ readme = "README.md"
repository = "https://github.com/rustasync/tide"
version = "0.2.0"

[dependencies]
cookie = { version = "0.12", features = ["percent-encode"] }
futures-preview = "0.3.0-alpha.16"
fnv = "1.0.6"
http = "0.1"
http-service = "0.2.0"
pin-utils = "0.1.0-alpha.4"
route-recognizer = "0.1.12"
serde = "1.0.91"
serde_derive = "1.0.91"
serde_json = "1.0.39"
slog = "2.4.1"
slog-async = "2.3.0"
slog-term = "2.4.0"
typemap = "0.3.3"
serde_urlencoded = "0.5.5"

[dependencies.http-service-hyper]
optional = true
version = "0.2.0"

[dependencies.multipart]
default-features = false
features = ["server"]
version = "0.16.1"

[features]
default = ["hyper"]
default = ["hyper", "cookies", "cors"]
cookies = ["tide-cookies"]
cors = ["tide-cors"]
hyper = ["http-service-hyper"]

[dependencies]
futures-preview = "0.3.0-alpha.18"
http = "0.1"
http-service = { git = "https://github.com/rustasync/http-service", branch = "tokio-0.2" }
http-service-hyper = { git = "https://github.com/rustasync/http-service", branch = "tokio-0.2", optional = true }
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this still needed? I believe we already published updated versions right?

Copy link
Contributor Author

@vorot93 vorot93 Sep 2, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you look closely, this actually depends on the branch. Specifically, this one:

http-rs/http-service#43

Besides, that branch depends upon git hyper anyway.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

0.3.1 was supposed to release earlier, but I only got it done today after seeing http-rs/http-service#45

Is there a reason we aren't using overrides for the Git dependencies in this branch? (Seems that would prevent issues with publishing, but correct me if I'm wrong.)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure -- Git deps can't be published to crates.io either way.

# Routing
fnv = "1.0.6"
route-recognizer = "0.1.13"
# Tide components
tide-cookies = { path = "./tide-cookies", optional = true, default-features = false }
tide-cors = { path = "./tide-cors", optional = true, default-features = false }
tide-core = { path = "./tide-core", default-features = false }
tide-headers = { path = "./tide-headers", default-features = false }
tide-log = { path = "./tide-log", default-features = false }
tide-forms = { path = "./tide-forms", default-features = false }
tide-querystring = { path = "./tide-querystring", default-features = false }

[dev-dependencies]
basic-cookies = "0.1.3"
bytes = "0.4.12"
cookie = { version = "0.12", features = ["percent-encode"] }
env_logger = "0.7.0"
futures-fs = "0.0.5"
futures-util-preview = { version = "0.3.0-alpha.16", features = ["compat"] }
http-service-mock = "0.2.0"
juniper = "0.11.1"
futures-util-preview = { version = "0.3.0-alpha.18", features = ["compat"] }
http-service-mock = { git = "https://github.com/rustasync/http-service", branch = "tokio-0.2" }
juniper = "0.14.0"
log = "0.4.6"
log4rs = "0.8.3"
mime = "0.3.13"
mime_guess = "2.0.0-alpha.6"
percent-encoding = "1.0.1"
serde = { version = "1.0.90", features = ["derive"] }
structopt = "0.2.15"
mime_guess = "2.0.1"
percent-encoding = "2.0.0"
serde = { version = "1.0.91", features = ["derive"] }
tera = "0.11"
runtime = "0.3.0-alpha.7"
# Tide components
tide-log = { path = "./tide-log", default-features = false }
tokio = "0.2.0-alpha.4"

[patch.crates-io]
http-service = { git = "https://github.com/rustasync/http-service", branch = "master" }
http-service-hyper = { git = "https://github.com/rustasync/http-service", branch = "master" }
http-service-mock = { git = "https://github.com/rustasync/http-service", branch = "master" }
[workspace]
members = [
"tide-compression",
"tide-cookies",
"tide-core",
"tide-cors",
"tide-forms",
"tide-headers",
"tide-log",
"tide-panic",
"tide-querystring",
"tide-slog",
]
24 changes: 12 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,26 +59,26 @@ Ecosystem WG, and **not ready for production use yet**.

**Hello World**

```rust
#![feature(async_await)]

fn main() -> Result<(), std::io::Error> {
```rust,no_run
#[tokio::main]
async fn main() -> Result<(), std::io::Error> {
let mut app = tide::App::new();
app.at("/").get(async move |_| "Hello, world!");
Ok(app.serve("127.0.0.1:8000")?)
app.at("/").get(|_| async move { "Hello, world!" });
app.serve("127.0.0.1:8000").await
}
```

**More Examples**

- [Hello World](https://github.com/rustasync/tide/tree/master/examples/hello.rs)
- [Hello World](https://github.com/rustasync/tide/blob/master/examples/hello.rs)
- [Messages](https://github.com/rustasync/tide/blob/master/examples/messages.rs)
- [Body Types](https://github.com/rustasync/tide/blob/master/examples/body_types.rs)
- [Multipart Form](https://github.com/rustasync/tide/tree/master/examples/multipart-form/main.rs)
- [Catch All](https://github.com/rustasync/tide/tree/master/examples/catch_all.rs)
- [Cookies](https://github.com/rustasync/tide/tree/master/examples/cookies.rs)
- [Default Headers](https://github.com/rustasync/tide/tree/master/examples/default_headers.rs)
- [GraphQL](https://github.com/rustasync/tide/tree/master/examples/graphql.rs)
- [Multipart Form](https://github.com/rustasync/tide/blob/master/examples/multipart_form/mod.rs)
- [Catch All](https://github.com/rustasync/tide/blob/master/examples/catch_all.rs)
- [Cookies](https://github.com/rustasync/tide/blob/master/examples/cookies.rs)
- [Default Headers](https://github.com/rustasync/tide/blob/master/examples/default_headers.rs)
- [GraphQL](https://github.com/rustasync/tide/blob/master/examples/graphql.rs)
- [Staticfile](https://github.com/rustasync/tide/blob/master/examples/staticfile.rs)

## Resources

Expand Down
17 changes: 6 additions & 11 deletions examples/body_types.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
#![feature(async_await)]

use serde::{Deserialize, Serialize};
use tide::{
error::ResultExt,
forms::{self, ExtractForms},
forms::{self, ContextExt},
response, App, Context, EndpointResult,
};

Expand All @@ -13,41 +11,38 @@ struct Message {
contents: String,
}

#[allow(unused_mut)] // Workaround clippy bug
async fn echo_string(mut cx: Context<()>) -> String {
let msg = cx.body_string().await.unwrap();
println!("String: {}", msg);
msg
}

#[allow(unused_mut)] // Workaround clippy bug
async fn echo_bytes(mut cx: Context<()>) -> Vec<u8> {
let msg = cx.body_bytes().await.unwrap();
println!("Bytes: {:?}", msg);
msg
}

#[allow(unused_mut)] // Workaround clippy bug
async fn echo_json(mut cx: Context<()>) -> EndpointResult {
let msg = cx.body_json().await.client_err()?;
let msg: Message = cx.body_json().await.client_err()?;
println!("JSON: {:?}", msg);
Ok(response::json(msg))
}

#[allow(unused_mut)] // Workaround clippy bug
async fn echo_form(mut cx: Context<()>) -> EndpointResult {
let msg = cx.body_form().await?;
let msg: Message = cx.body_form().await?;
println!("Form: {:?}", msg);
Ok(forms::form(msg))
}

fn main() {
#[tokio::main]
async fn main() {
let mut app = App::new();

app.at("/echo/string").post(echo_string);
app.at("/echo/bytes").post(echo_bytes);
app.at("/echo/json").post(echo_json);
app.at("/echo/form").post(echo_form);

app.serve("127.0.0.1:8000").unwrap();
app.serve("127.0.0.1:8000").await.unwrap();
}
7 changes: 3 additions & 4 deletions examples/catch_all.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
#![feature(async_await)]

use tide::Context;

async fn echo_path(cx: Context<()>) -> String {
let path: String = cx.param("path").unwrap();
format!("Your path is: {}", path)
}

fn main() {
#[tokio::main]
async fn main() {
let mut app = tide::App::new();
app.at("/echo_path/*path").get(echo_path);
app.serve("127.0.0.1:8000").unwrap();
app.serve("127.0.0.1:8000").await.unwrap();
}
10 changes: 3 additions & 7 deletions examples/cookies.rs
Original file line number Diff line number Diff line change
@@ -1,30 +1,26 @@
#![feature(async_await)]

use cookie::Cookie;
use tide::{cookies::ContextExt, middleware::CookiesMiddleware, Context};

/// Tide will use the the `Cookies`'s `Extract` implementation to build this parameter.
///
async fn retrieve_cookie(mut cx: Context<()>) -> String {
format!("hello cookies: {:?}", cx.get_cookie("hello").unwrap())
}

#[allow(unused_mut)] // Workaround clippy bug
async fn set_cookie(mut cx: Context<()>) {
cx.set_cookie(Cookie::new("hello", "world")).unwrap();
}

#[allow(unused_mut)] // Workaround clippy bug
async fn remove_cookie(mut cx: Context<()>) {
cx.remove_cookie(Cookie::named("hello")).unwrap();
}

fn main() {
#[tokio::main]
async fn main() {
let mut app = tide::App::new();
app.middleware(CookiesMiddleware::new());

app.at("/").get(retrieve_cookie);
app.at("/set").get(set_cookie);
app.at("/remove").get(remove_cookie);
app.serve("127.0.0.1:8000").unwrap();
app.serve("127.0.0.1:8000").await.unwrap();
}
25 changes: 25 additions & 0 deletions examples/cors.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
use http::header::HeaderValue;
use tide::middleware::{CorsMiddleware, CorsOrigin};

#[tokio::main]
async fn main() {
let mut app = tide::App::new();

app.middleware(
CorsMiddleware::new()
.allow_origin(CorsOrigin::from("*"))
.allow_methods(HeaderValue::from_static("GET, POST, OPTIONS")),
);

app.at("/").get(|_| async move { "Hello, world!" });

app.serve("127.0.0.1:8000").await.unwrap();
}

// You can test this by running the following in your browser:
//
// ```console
// $ fetch("http://127.0.0.1:8000")
// ```
//
// You will probably get a browser alert when running without cors middleware.
Loading