I am using svelte/sapper with express.
I have an api in routes/billing/index.js
It needs to fetch data from customers/[customernumber]/detections.js
My question is how to fetch data from internal apis with in the routes folder using relative URLs
async function getDataFromGateway(customerNumber) {
if (typeof fetch !== 'function') {
global.fetch = require('node-fetch')
}
const data = await fetch(`http://localhost:19052/customers/${customerNumber}/detections`)
.then(res => res.json())
.catch(error => {
console.log(error)
return error
}
)
return data
}
Is there a way to do this using relative url
The easiest way is to fetch this data inside preload, using this.fetch, since that will automatically handle relative URLs the same way whether it's running on server or client:
<script context="module">
export async function preload(page, session) {
const r = await this.fetch(`customers/${getCustomerNumber(session)}/detections`);
const data = await r.json();
return {
foo: data.foo
};
}
</script>
If that's not possible for whatever reason, you might need to configure an environment variable, e.g. BASE_URL:
async function getDataFromGateway(customerNumber) {
if (typeof fetch !== 'function') {
global.fetch = require('node-fetch')
}
const data = await fetch(`${process.env.BASE_URL}/customers/${customerNumber}/detections`)
.then(res => res.json())
.catch(error => {
console.log(error)
return error
}
)
return data
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With