У меня есть такая настройка 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)
})
}