Svelte / Sapper fetch / this.fetch не определен в API на стороне сервера

Вот мой вопрос об использовании Svelte / Sapper

  • У меня есть файл в /src/routes/login.js
  • Согласно документу Sapper, он создаст конечную точку API в http://<my_domain>/login, что и делает.
  • Теперь в login.js я хотел бы вызвать другой сервер API, предположим, что это http://another_server/auth
  • Как ни использую fetch функцию: fetch("http://another_server/auth"), this.fetch("http://another_server/auth"), Svelte ответы: (this.)fetch is not defined.
  • В документации сказано, что его нужно запускать в preload(), поэтому я помещаю выборку в export async function preload(){}, это не сработало.

Итак, мой вопрос: кроме использования axios, могу ли я продолжать использовать fetch в запросе API на стороне сервера?

Только что протестировано в файле шаблона [slug].json.js, когда я добавляю функцию (this.)fetch, она не компилируется, та же ошибка: (this.)fetch is not defined

Большое тебе спасибо.


person Ellery Leung    schedule 18.02.2021    source источник


Ответы (1)


Установите пакет npm node-fetch и используйте его в маршрутах вашего сервера вместо стандартных fetch.

(в /src/routes/login.js):

import fetch from 'node-fetch'
...
// inside your route handler
const response = await fetch('http://another_server/auth') // no error

Если вы не уверены, будет ли код выполняться на стороне клиента или на стороне сервера (т.е. вы ищете универсальный / изоморфный подход), вы можете использовать условное требование:

// inside your route handler
const fetch = process.browser ? window.fetch : require('node-fetch').default
const response = await fetch('http://another_server/auth') // no error

Но для вашего варианта использования это, вероятно, излишество, поскольку серверные маршруты по определению выполняются на стороне сервера.

person Thomas Hennes    schedule 18.02.2021