mr.goodman
01/08/2024, 2:12 AMjs
import { Router } from 'itty-router'; const router = Router()
order_data = [];
//admin only
router.get("/order", async (req) => {
return new Response(JSON.stringify(order_data));
});
McSneaky
01/08/2024, 10:12 AMErisa | Support Engineer
01/08/2024, 12:07 PMErisa | Support Engineer
01/08/2024, 12:07 PMmr.goodman
01/08/2024, 1:37 PMErisa | Support Engineer
01/08/2024, 2:01 PMmr.goodman
01/08/2024, 4:08 PMmr.goodman
01/08/2024, 4:08 PMmr.goodman
01/08/2024, 4:09 PMmr.goodman
01/08/2024, 4:09 PMmr.goodman
01/08/2024, 4:09 PMjs
export const order_management = {
async postData(data) {
return await(await fetch(
`https://server.syntaxrecoveriesorders.workers.dev/order/${encodeURIComponent(JSON.stringify(data))}`, { method: "POST" }
)).text();
},
async getData(id) {
return await(await fetch(
`https://server.syntaxrecoveriesorders.workers.dev/order/${encodeURIComponent(id)}`
)).text();
}
}
mr.goodman
01/08/2024, 4:09 PMmr.goodman
01/08/2024, 9:48 PMkian
01/08/2024, 9:56 PMmr.goodman
01/08/2024, 9:58 PMmr.goodman
01/08/2024, 9:58 PMmr.goodman
01/08/2024, 9:59 PMmr.goodman
01/08/2024, 10:08 PMmr.goodman
01/08/2024, 11:23 PMMcSneaky
01/09/2024, 7:21 AMserver.syntaxrecoveriesorders.workers.dev
and
server.syntaxrecoveriesorders.workers.dev
Are both on the same zone, so you can't make requests between them. You have to use service bindingmr.goodman
01/09/2024, 11:05 AMmr.goodman
01/09/2024, 11:05 AMmr.goodman
01/09/2024, 11:05 AMmr.goodman
01/09/2024, 11:06 AMmr.goodman
01/09/2024, 11:06 AMmr.goodman
01/09/2024, 11:06 AMmr.goodman
01/09/2024, 11:06 AMmr.goodman
01/09/2024, 11:06 AMmr.goodman
01/09/2024, 11:06 AMMcSneaky
01/09/2024, 11:40 AMMcSneaky
01/09/2024, 11:40 AMMcSneaky
01/09/2024, 11:40 AMmr.goodman
01/09/2024, 12:07 PMmr.goodman
01/09/2024, 12:07 PMmr.goodman
01/09/2024, 12:07 PMMcSneaky
01/09/2024, 12:15 PMts
import { Router } from 'itty-router'; const router = Router()
order_data = [];
//admin only
router.get("/order", async (req) => {
return new Response(JSON.stringify(order_data));
Worker 2:
ts
router.get("/other-endpoint", async (req, env) => {
return env.MY_BINDING.fetch(`http://MY_SERVICE_TO_CALL/order/${encodeURIComponent(id)}`, request)
}
And inside your wrangler.toml
of Worker 2 define BINDING
and SERVICE
in services
toml
services = [
{ binding = "MY_BINDING", service = "MY_SERVICE_TO_CALL" },
]
That service has to be other worker nameMcSneaky
01/09/2024, 12:16 PMmr.goodman
01/09/2024, 12:24 PMmr.goodman
01/09/2024, 12:25 PMmr.goodman
01/09/2024, 12:25 PMMcSneaky
01/09/2024, 12:26 PMmr.goodman
01/09/2024, 12:26 PMmr.goodman
01/09/2024, 12:26 PMMcSneaky
01/09/2024, 12:26 PMmr.goodman
01/09/2024, 12:26 PMmr.goodman
01/09/2024, 12:26 PMmr.goodman
01/09/2024, 12:26 PMmr.goodman
01/09/2024, 12:26 PMMcSneaky
01/09/2024, 12:27 PMwrangler.toml
or from CloudFlare dashboardmr.goodman
01/09/2024, 12:27 PMmr.goodman
01/09/2024, 12:27 PMserver
McSneaky
01/09/2024, 12:27 PMmr.goodman
01/09/2024, 12:27 PMservices = [
{ binding = "server", service = "server" },
]
McSneaky
01/09/2024, 12:27 PMmr.goodman
01/09/2024, 12:27 PMmr.goodman
01/09/2024, 12:28 PMMcSneaky
01/09/2024, 12:28 PMenv.server.fetch('https://server/orders/10')
Something like this should work for youmr.goodman
01/09/2024, 12:29 PMmr.goodman
01/09/2024, 12:29 PMmr.goodman
01/09/2024, 12:29 PMmr.goodman
01/09/2024, 12:29 PMMcSneaky
01/09/2024, 12:29 PMmr.goodman
01/09/2024, 12:30 PMmr.goodman
01/09/2024, 12:30 PMMcSneaky
01/09/2024, 12:31 PMts
export const order_management = {
async postData(data, env) {
env.server.fetch(...)
},
async getData(id, env) {
}
}
// And then use in your worker as
router.get("/other-endpoint", async (req, env) => {
await order_management.postData(data, env)
}
mr.goodman
01/09/2024, 12:31 PMmr.goodman
01/09/2024, 12:31 PMmr.goodman
01/09/2024, 12:31 PMmr.goodman
01/09/2024, 12:31 PMmr.goodman
01/09/2024, 12:31 PMmr.goodman
01/09/2024, 12:31 PMmr.goodman
01/09/2024, 12:31 PMmr.goodman
01/09/2024, 12:31 PMmr.goodman
01/09/2024, 12:31 PMmr.goodman
01/09/2024, 12:31 PMmr.goodman
01/09/2024, 12:32 PMerror code: 1042
mr.goodman
01/09/2024, 12:32 PMMcSneaky
01/09/2024, 12:32 PMMcSneaky
01/09/2024, 12:32 PMhttps://server.syntaxrecoveriesorders.workers.dev/order
With just https://server/order
mr.goodman
01/09/2024, 12:33 PMmr.goodman
01/09/2024, 12:33 PMmr.goodman
01/09/2024, 12:33 PMmr.goodman
01/09/2024, 12:33 PMMcSneaky
01/09/2024, 12:34 PMworkers.dev
๐ค
I was using on actual domainmr.goodman
01/09/2024, 12:35 PMMcSneaky
01/09/2024, 12:35 PMmr.goodman
01/09/2024, 12:35 PMMcSneaky
01/09/2024, 12:35 PMmr.goodman
01/09/2024, 12:35 PMmr.goodman
01/09/2024, 12:35 PMjs
router.get("/order/:id", async (req, env) => {
return new Response(await order_management.getData(decodeURIComponent(req.params.id),env));
})
mr.goodman
01/09/2024, 12:36 PMjs
export const order_management = {
async postData(data) {
return await(await fetch(
`https://server.syntaxrecoveriesorders.workers.dev/order/${encodeURIComponent(JSON.stringify(data))}`, { method: "POST" }
)).text();
},
async getData(id,env) {
return await(await env.server.fetch(
`http://server/order/${encodeURIComponent(id)}`
)).text();
}
}
mr.goodman
01/09/2024, 12:36 PMmr.goodman
01/09/2024, 12:36 PMmr.goodman
01/09/2024, 12:36 PMmr.goodman
01/09/2024, 12:36 PMmr.goodman
01/09/2024, 12:36 PMMcSneaky
01/09/2024, 12:36 PMMcSneaky
01/09/2024, 12:37 PMMcSneaky
01/09/2024, 12:38 PMmr.goodman
01/09/2024, 12:39 PMjs
router.get("/order/:id", async (req, env) => {
try {
return new Response(await order_management.getData(decodeURIComponent(req.params.id),env));
} catch(error) {
return new Response(error)
}
})
mr.goodman
01/09/2024, 12:39 PMTypeError: Cannot read properties of undefined (reading 'order_server')
mr.goodman
01/09/2024, 12:39 PMjs
export const order_management = {
async postData(data) {
return await(await fetch(
`https://server.syntaxrecoveriesorders.workers.dev/order/${encodeURIComponent(JSON.stringify(data))}`, { method: "POST" }
)).text();
},
async getData(id,env) {
return await(await env.order_server.fetch(
`http://order_server/order/${encodeURIComponent(id)}`
)).text();
}
}
McSneaky
01/09/2024, 12:40 PMenv
is undefined?!mr.goodman
01/09/2024, 12:40 PMMcSneaky
01/09/2024, 12:40 PMMcSneaky
01/09/2024, 12:41 PMmr.goodman
01/09/2024, 12:41 PMMcSneaky
01/09/2024, 12:41 PMitty-router
?mr.goodman
01/09/2024, 12:41 PMMcSneaky
01/09/2024, 12:42 PMMcSneaky
01/09/2024, 12:47 PMyml
// worker.toml
name = "edge-encoder"
main = "index.js"
compatibility_date = "2022-05-03"
services = [
{ binding = "collector", service = "edge-collector-dev" },
]
ts
// .js
import { Router } from 'itty-router';
// Create a new router
const router = Router();
router.get('/edge/encoder/v1', async ({ query }, env) => {
let base64 = btoa(JSON.stringify(query));
return env.collector.fetch('https://edge-collector-dev/edge/collector/v1?encoded_object=' + base64)
})
Worker 2 called "edge-collector-dev":
ts
// .js
import { Router } from 'itty-router';
// Create a new router
const router = Router();
router.get('/edge/collector/v1', async ({ query }, env) => {
console.log(query)
return new Response('OK')
})
Works perfectly ๐คMcSneaky
01/09/2024, 12:47 PMMcSneaky
01/09/2024, 12:47 PMmr.goodman
01/09/2024, 12:47 PMMcSneaky
01/09/2024, 12:48 PMenv
in router to see if it exists theremr.goodman
01/09/2024, 12:51 PMMcSneaky
01/09/2024, 12:52 PMts
router.get("/order/:id", async (req, env) => {
console.log(env) // What does it say?
try {
return new Response(await order_management.getData(decodeURIComponent(req.params.id),env));
} catch(error) {
return new Response(error)
}
})
McSneaky
01/09/2024, 12:52 PMdev
?McSneaky
01/09/2024, 12:52 PMMcSneaky
01/09/2024, 12:52 PMwrangler deploy
and then test in prod ๐McSneaky
01/09/2024, 12:53 PMmr.goodman
01/09/2024, 12:53 PMmr.goodman
01/09/2024, 12:53 PMMcSneaky
01/09/2024, 12:53 PMwrangler dev
?
npm run dev?
mr.goodman
01/09/2024, 12:55 PMPS E:\Desktop\Syntax Recoveries Manager> wrangler dev
โ
๏ธ wrangler 3.7.0 (update available 3.22.3)
------------------------------------------------------
wrangler dev now uses local mode by default, powered by ๐ฅ Miniflare and ๐ท workerd.
To run an edge preview session for your Worker, use wrangler dev --remote
โฒ [WARNING] Processing wrangler.toml configuration:
- "services" fields are experimental and may change or break at any time.
โฒ [WARNING] This worker is bound to live services: order_server (server)
โฒ [WARNING] Enabling Node.js compatibility mode for built-ins and globals. This is experimental and has serious tradeoffs. Please see https://github.com/ionic-team/rollup-plugin-node-polyfills/ for more details.
Your worker has access to the following bindings:
- Services:
- order_server: server
โฒ [WARNING] โ Support for service bindings in local mode is experimental and may change.
โ Starting local server...
kj/async-io-win32.c++:982: warning: Bind address resolved to multiple addresses. Only the first address will be used. If this is incorrect, specify the address numerically. This may be fixed in the future.; addrs[0].toString() = 127.0.0.1:63121
[mf:inf] Ready on http://0.0.0.0:8787
[mf:inf] - http://10.0.0.6:8787
[mf:inf] - http://127.0.0.1:8787
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎโ [b] open a browser, [d] open Devtools, [l] turn off local mode, [c] clear console, [x] to exit โโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
McSneaky
01/09/2024, 12:56 PMwrangler deploy
and then test on production (real URL, not local)mr.goodman
01/09/2024, 12:56 PMMcSneaky
01/09/2024, 12:56 PMmr.goodman
01/09/2024, 12:57 PMMcSneaky
01/09/2024, 12:57 PMMcSneaky
01/09/2024, 12:57 PMmr.goodman
01/09/2024, 1:05 PMmr.goodman
01/09/2024, 1:05 PMmr.goodman
01/09/2024, 1:05 PMmr.goodman
01/09/2024, 1:05 PMmr.goodman
01/09/2024, 1:05 PMmr.goodman
01/09/2024, 1:06 PMmr.goodman
01/09/2024, 1:06 PMname = "manager"
main = "src/main.js"
compatibility_date = "2022-07-12"
node_compat = true
services = [
{ binding = "order_server", service = "server" },
]
mr.goodman
01/09/2024, 1:06 PM{
"name": "Syntax Recoveries Manager",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"crypto": "^1.0.1",
"crypto-js": "^4.2.0",
"cryptojs": "^2.5.3",
"decode-uri-component": "^0.4.1",
"itty-router": "^4.0.25",
"urldecode": "^1.0.1"
}
},
"node_modules/crypto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz",
"integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==",
"deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in."
},
"node_modules/crypto-js": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
},
"node_modules/cryptojs": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/cryptojs/-/cryptojs-2.5.3.tgz",
"integrity": "sha512-+rdPl1UCxE8s3R94NNn+zMKOiI4MJ7dyh3X0c5uBL3btDr4zQ6acd7f9mY7Wb5MrccZEi2Rrha3OEtLcc5XXog==",
"engines": {
"node": "*"
}
},
"node_modules/decode-uri-component": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.4.1.tgz",
"integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==",
"engines": {
"node": ">=14.16"
}
},
"node_modules/itty-router": {
"version": "4.0.25",
"resolved": "https://registry.npmjs.org/itty-router/-/itty-router-4.0.25.tgz",
"integrity": "sha512-WbH1x46QFKNAjp85GYZzDteriZl9nJ0flwGJDVfzC4HT0B/nb01/KOD7mEr+5cYmuqy9T7L/A3ifNzCpzQ1fcw=="
},
"node_modules/urldecode": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/urldecode/-/urldecode-1.0.1.tgz",
"integrity": "sha512-h0S6hi8/2kC6ZTbnzRyRC86BKDp9rSV2BndvtedcPSFcWdqdXc2Bru1NuF4Oq89D4HKitpX3+EJDry0uOjfTyw=="
}
}
}
McSneaky
01/09/2024, 1:07 PMenv
is undefined for you for some reason, but I have no idea whyMcSneaky
01/09/2024, 1:07 PMMcSneaky
01/09/2024, 1:07 PMmr.goodman
01/09/2024, 1:10 PMmr.goodman
01/09/2024, 1:10 PMMcSneaky
01/09/2024, 1:11 PMmr.goodman
01/09/2024, 1:19 PMmr.goodman
01/09/2024, 1:19 PMMcSneaky
01/09/2024, 2:41 PMmr.goodman
01/09/2024, 2:54 PMmr.goodman
01/10/2024, 12:56 AMmr.goodman
01/10/2024, 12:56 AMmr.goodman
01/10/2024, 3:33 PMUnsmart | Tech debt
01/10/2024, 5:47 PMmr.goodman
01/10/2024, 5:48 PMmr.goodman
01/10/2024, 5:48 PMmr.goodman
01/10/2024, 5:48 PMmr.goodman
01/10/2024, 5:48 PMUnsmart | Tech debt
01/10/2024, 5:49 PMUnsmart | Tech debt
01/10/2024, 5:50 PMmr.goodman
01/10/2024, 8:09 PMmr.goodman
01/10/2024, 8:10 PMmr.goodman
01/10/2024, 8:10 PMmr.goodman
01/10/2024, 8:11 PMenv
is undefined...mr.goodman
01/10/2024, 8:11 PM