Ответ JSON становится заторможенным при перехвате всех URL и возвращается как страница 404 - PullRequest
0 голосов
/ 08 мая 2018

У меня есть такая настройка React / Express (упрощенная для краткости):

const path = require('path')
const express = require('express')

const CLIENT_BUILD_PATH = path.join(__dirname, '../build')

const serialize = data => JSON.stringify({ data })

const app = express()
app.use(express.static(CLIENT_BUILD_PATH))

app.get('/api/get/data', (request, response) => {
  Promise.resolve(loadData()).then(data => {
    console.log(data)
    response.writeHead(200, {'Content-Type': 'application/json'})
    response.end(serialize(data))
  }).catch((error) => {
    response.writeHead(200, {'Content-Type': 'application/json'})
    response.end(serialize({}))
  })
})

// Catch all route
app.get('*', (request, response) => {
  response.sendFile(path.join(CLIENT_BUILD_PATH, 'index.html'))
})

При обращении к URL /api/get/data я хотел бы вернуть обычный JSON.

1007 * Е.Г. *

{
  "foo": "bar",
}

Однако возвращается React 404 страница .

loadData() разрешается просто отлично, я вижу data, зарегистрированный в консоли. Но каким-то образом ответ переопределяется (или что-то) с помощью catch all route. Я думаю, в любом случае, я не могу понять это.

Обновление : loadData() структурировано так:

const loadData = () => {
  return new Promise((resolve, reject) => {
    ...
    resolve(data)
  })
}

1 Ответ

0 голосов
/ 08 мая 2018

ExpressJs имеет сокращенную функцию для ответов JSON. Используйте .json() в ответе, чтобы получить желаемые результаты, например:

response.json(data);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...