Как я могу получить доступ к текстовому ответу выборки от клиента JS для ускорения? - PullRequest
0 голосов
/ 18 марта 2020

У меня есть приложение fastify node.js, которое позволяет увидеть текстовые результаты обещания прямо перед его возвратом в вызывающий браузер JS. Когда это обещание возвращается в браузер JS, я получаю только пустую строку из текста обещания. Я предполагаю, что обещания не связаны друг с другом, и это новое обещание, в котором нет содержания другого. Если это правильно, как я могу получить доступ к внутренним результатам обещания?

Я передал обещания между модулями в приложении fastify без проблем, получая результаты в любой момент, я просто не понимаю, что я делаю неправильно в этот момент. Вот основы того, что я пытаюсь сделать с обеих сторон вызова:

// node.js
fastify.get('/promise', async function(request, reply) {
    var results = await someFunction(request)
    console.log(await results.text()) // this displays results as XML
    return results
})

// call to fastify app from browser JS
async function getPromise(params) {
    var response = await fetch("http://localhost:3000/promise" + params, { mode: 'no-cors' })
    console.log(await response.text()) // this is empty
}

1 Ответ

1 голос
/ 19 марта 2020

{ mode: 'no-cors' } блокирует вам доступ к ответу, поскольку он непрозрачен

Непрозрачный отфильтрованный ответ - это фильтрованный ответ, тип которого "непрозрачный", список URL-адресов - пустой список, статус - 0, сообщение о состоянии - пустая последовательность байтов, список заголовков - пустой, а тело - пустое.

Вот полный пример:

'use strict'

const fetch = require('node-fetch')
const fastify = require('fastify')({ logger: true })
const fastifyCors = require('fastify-cors')

fastify.register(fastifyCors, {
  credentials: true,
  origin: '*'
})

fastify.get('/promise', async function (request, reply) {
  const results = await fetch('http://www.mocky.io/v2/5e738e46300000fd9b2e66ae')
  return results.text()
})

fastify.listen(3000)

В браузере:

await fetch("http://localhost:3000/promise").then(res => res.text())

Будет напечатано HELLO WORLD

...