使用绝对 url 前缀获取
Fetch with absolute url prefix
大多数时候我在 fetch or node-fetch 前加上 http://localhost
(使其成为绝对 url)。
import fetch from 'node-fetch';
fetch('http://localhost/whatever')
除了简单地将 localhost
放在变量中之外,是否有任何方法可以避免 localhost
部分?
const baseUrl = 'http://localhost';
fetch(`${baseUrl}/whatever`)
与
非常相关
TL;DR: fetch-absolute 正是这样做的。
详细:
您可以在 fetch 之上创建一个抽象层。
function fetchAbsolute(fetch) {
return baseUrl => (url, ...otherParams) => url.startsWith('/') ? fetch(baseUrl + url, ...otherParams) : fetch(url, ...otherParams)
}
或者您可以简单地使用 fetch-absolute。
const fetch = require('node-fetch');
const fetchAbsolute = require('fetch-absolute');
const fetchApi = fetchAbsolute(fetch)('http://localhost:3030');
it('should should display "It works!"', async () => {
const response = await fetchApi('/');
const json = await response.json();
expect(json).to.eql({ msg: 'It works!' });
});
您可以覆盖 fetch
函数:
import origFetch from 'node-fetch';
const fetch = (url, ...params) => {
if (url.startsWith('/')) return origFetch('http://localhost' + url, ...params)
else return origFetch(url, ...params);
}
另一个答案创建了一个函数,该函数 return 是一个函数,return 是一个函数——这不是必需的;你只需要return一个函数。
function fetchAbsolute(fetch, base_url) {
return (url, ...params) => {
if (url.startsWith('/')) return fetch(base_url + url, ...params)
else return fetch(url, ...params);
}
}
const fetch = fetchAbsolute(origFetch, 'http://localhost');
大多数时候我在 fetch or node-fetch 前加上 http://localhost
(使其成为绝对 url)。
import fetch from 'node-fetch';
fetch('http://localhost/whatever')
除了简单地将 localhost
放在变量中之外,是否有任何方法可以避免 localhost
部分?
const baseUrl = 'http://localhost';
fetch(`${baseUrl}/whatever`)
与
TL;DR: fetch-absolute 正是这样做的。
详细:
您可以在 fetch 之上创建一个抽象层。
function fetchAbsolute(fetch) {
return baseUrl => (url, ...otherParams) => url.startsWith('/') ? fetch(baseUrl + url, ...otherParams) : fetch(url, ...otherParams)
}
或者您可以简单地使用 fetch-absolute。
const fetch = require('node-fetch');
const fetchAbsolute = require('fetch-absolute');
const fetchApi = fetchAbsolute(fetch)('http://localhost:3030');
it('should should display "It works!"', async () => {
const response = await fetchApi('/');
const json = await response.json();
expect(json).to.eql({ msg: 'It works!' });
});
您可以覆盖 fetch
函数:
import origFetch from 'node-fetch';
const fetch = (url, ...params) => {
if (url.startsWith('/')) return origFetch('http://localhost' + url, ...params)
else return origFetch(url, ...params);
}
另一个答案创建了一个函数,该函数 return 是一个函数,return 是一个函数——这不是必需的;你只需要return一个函数。
function fetchAbsolute(fetch, base_url) {
return (url, ...params) => {
if (url.startsWith('/')) return fetch(base_url + url, ...params)
else return fetch(url, ...params);
}
}
const fetch = fetchAbsolute(origFetch, 'http://localhost');