#Hosting an API

51 messages · Page 1 of 1 (latest)

grizzled phoenix
#

So I am new to making web apps and I was trying to make a website with express in backend. I didn't want to spend any money to host it so i tried vercel and after countless errors and asking for help in various server, it turns out u can't host your own api endpoints on your vercel app. So I took some advice from other people and they told me to keep the API on a different server. I remembered that my friend and I share a VPS so I hosted my API on it (Without any domain so i was making requests using the VPS' ip). It worked like a charm on my local machine but I guess vercel doesn't allow outgoing requests to urls without https (SSL certificates) and since my VPS doesnt have a certificate vercel kept requests to it.
I asked for help about this and someone told me to try cloudflare and they also mentioned pages and functions. I've never used cloudflare before so I have no idea what to do. Please help

grizzled phoenix
#

help

timid bear
#

Potentially using Cloudflare Tunnels, it is a fantastic product

grizzled phoenix
#

im trying to use cf workers

#

to host my api there

#

also using wrangler

#

so like

#

can we make api calls in a worker ??

timid bear
#

You can make calls to other APIs from a worker.

#

What are you trying to do here?

grizzled phoenix
#

like so

app.get('/geo/:id', (c) => {
    let data;
    fetch(`https://api.gep/?id=${c.req.param('id')}`).then(async (result) =>
        console.log('call')
    );
    console.log(data);
    return c.text(`test`);
});
#

but its logging undefined

#

also call isnt being logged

grizzled phoenix
timid bear
#

You should do some research on async in javascript. However... cloudflare workers don't use express, so...

grizzled phoenix
#

nah cuz

#

in my actual code

#

i need to do result.json() which returns a promise

timid bear
#

can you should your actual code?

grizzled phoenix
#
app.get('/geo/:id', (c) => {
    let data;
    fetch(`https://api.ip2location.io/?key=[key]&ip=${c.req.param('id')}`).then(
        async (result) => (data = await result.json())
    );
    console.log(data);
    return c.text(`test`);
});
grizzled phoenix
#

yup sorry

timid bear
#

Cloudflare will do a little bit of geolocation for you there, btw, in the request.cf object.

grizzled phoenix
#

idk what that is its my 1st time

timid bear
grizzled phoenix
#

how do i access the said data

timid bear
#

Hono seems to support async handlers, so you need your whole handler to be async. That way you can actually wait for there to be data there before you try to print it.

timid bear
grizzled phoenix
#

yooo

#

it worked

timid bear
#

yw!

#

async is very tricky, heh

#

enjoy learning to code!

grizzled phoenix
#

thanks !!

lean crater
timid bear
#

yep

grizzled phoenix
#

im using wrangler

#

and trying to use namespaces

#

and docs show to use env.[namespace_name].put(...)

#

but i get ReferenceError: env is not defined

timid bear
#

i don’t know on that one