Cannot read properties of undefined (reading 'fetch')

Hey there, I'm using cloudflare workers with workers-rs and wrangler. I currently have a basic hello world worker setup:
use worker::*;

mod utils;

fn log_request(req: &Request) {
console_log!(
"{} - [{}], located at: {:?}, within: {}",
Date::now().to_string(),
req.path(),
req.cf().coordinates().unwrap_or_default(),
req.cf().region().unwrap_or_else(|| "unknown region".into())
);
}

#[event(fetch)]
pub async fn main(req: Request, env: Env, _ctx: worker::Context) -> Result<Response> {
log_request(&req);

// Optionally, get more helpful error messages written to the console in the case of a panic.
utils::set_panic_hook();

// Optionally, use the Router to handle matching endpoints, use ":name" placeholders, or "*name"
// catch-alls to match on specific patterns. Alternatively, use `Router::with_data(D)` to
// provide arbitrary data that will be accessible in each route via the `ctx.data()` method.
let router = Router::new();

// Add as many routes as your Worker needs! Each route will get a `Request` for handling HTTP
// functionality and a `RouteContext` which you can use to and get route parameters and
// Environment bindings like KV Stores, Durable Objects, Secrets, and Variables.
router
.get("/", |_, _| Response::ok("Hello from Workers!"))
.run(req, env)
.await
}
use worker::*;

mod utils;

fn log_request(req: &Request) {
console_log!(
"{} - [{}], located at: {:?}, within: {}",
Date::now().to_string(),
req.path(),
req.cf().coordinates().unwrap_or_default(),
req.cf().region().unwrap_or_else(|| "unknown region".into())
);
}

#[event(fetch)]
pub async fn main(req: Request, env: Env, _ctx: worker::Context) -> Result<Response> {
log_request(&req);

// Optionally, get more helpful error messages written to the console in the case of a panic.
utils::set_panic_hook();

// Optionally, use the Router to handle matching endpoints, use ":name" placeholders, or "*name"
// catch-alls to match on specific patterns. Alternatively, use `Router::with_data(D)` to
// provide arbitrary data that will be accessible in each route via the `ctx.data()` method.
let router = Router::new();

// Add as many routes as your Worker needs! Each route will get a `Request` for handling HTTP
// functionality and a `RouteContext` which you can use to and get route parameters and
// Environment bindings like KV Stores, Durable Objects, Secrets, and Variables.
router
.get("/", |_, _| Response::ok("Hello from Workers!"))
.run(req, env)
.await
}
Whenever I attempt to GET the worker, I receive the following error. Any help would be appreciated
4 Replies
kian
kian14mo ago
What's your Cargo.toml? and Wrangler.toml
mooon
mooon14mo ago
Cargo.toml:
[package]
name = "todo-worker"
version = "0.0.0"
edition = "2018"

[lib]
crate-type = ["cdylib", "rlib"]

[features]
default = ["console_error_panic_hook"]

[dependencies]
cfg-if = "0.1.2"
worker = "0.0.11"
serde_json = "1.0.67"

# The `console_error_panic_hook` crate provides better debugging of panics by
# logging them with `console.error`. This is great for development, but requires
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
# code size when deploying.
console_error_panic_hook = { version = "0.1.1", optional = true }

[profile.release]
# Tell `rustc` to optimize for small code size.
opt-level = "s"
[package]
name = "todo-worker"
version = "0.0.0"
edition = "2018"

[lib]
crate-type = ["cdylib", "rlib"]

[features]
default = ["console_error_panic_hook"]

[dependencies]
cfg-if = "0.1.2"
worker = "0.0.11"
serde_json = "1.0.67"

# The `console_error_panic_hook` crate provides better debugging of panics by
# logging them with `console.error`. This is great for development, but requires
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
# code size when deploying.
console_error_panic_hook = { version = "0.1.1", optional = true }

[profile.release]
# Tell `rustc` to optimize for small code size.
opt-level = "s"
wrangler.toml
name = "" # todo
main = "build/worker/shim.mjs"
compatibility_date = "2022-01-20"

[vars]
WORKERS_RS_VERSION = "0.0.11"

[build]
command = "cargo install -q worker-build --version 0.0.7 && worker-build --release"
name = "" # todo
main = "build/worker/shim.mjs"
compatibility_date = "2022-01-20"

[vars]
WORKERS_RS_VERSION = "0.0.11"

[build]
command = "cargo install -q worker-build --version 0.0.7 && worker-build --release"
kian
kian14mo ago
Remove 0.0.7 from your build.command in wrangler.toml and bump worker in Cargo.toml's dependencies to 0.0.16
mooon
mooon14mo ago
alright, trying that now awesome, thank you very much, that MeowHeartCloudflare