使用绝对url前缀获取

问题描述 投票:0回答:2

大多数时候,我都会在 fetchnode-fetch 前面加上

http://localhost
(使其成为绝对网址)。

import fetch from 'node-fetch';

fetch('http://localhost/whatever')

除了简单地将

localhost
放入变量之外,还有什么方法可以避免
localhost
部分?

const baseUrl = 'http://localhost';

fetch(`${baseUrl}/whatever`)

具有绝对 url 前缀的 Superagent 非常相关

node.js absolute-path node-fetch
2个回答
4
投票

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!' });
});

3
投票

您可以覆盖

fetch
函数:

import origFetch from 'node-fetch';

const fetch = (url, ...params) => {
  if (url.startsWith('/')) return origFetch('http://localhost' + url, ...params)
  else return origFetch(url, ...params);
}

另一个答案创建一个函数,该函数返回一个函数,该函数返回一个函数——这是没有必要的;你只需要返回一个函数。

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');
© www.soinside.com 2019 - 2024. All rights reserved.