2017-06-08 24 views
1

更新#2:這已解決,請參閱我自己的答案(我不能接受)。fetch()標題顯示爲應用程序/ x-www-form-urlencoded而不是應用程序/ json

我正在Heroku上運行React應用程序,通過Express使用node.js後端。在前臺,我想送包含JSON有效載荷的POST請求,這是像這樣發送:

fetch('/api/shows', { 
     method: 'POST', 
     accept: 'application/json', 
     headers: new Headers({ 
      'Content-Type': 'application/json', 
     }), 
     // mode: 'cors', // tried this, but no effect 
     // cache: 'default', // tried this, but no effect 
     body: JSON.stringify({ "foo": "bar" }), 
    }).then(response => { 
     return response.json(); 
    }).then(response => { 
     // … handling the response … 
    }).catch(err => { 
     // … handling errors … 
    }); 

後端設置是這樣的:

const express = require('express'); 
const bodyParser = require('body-parser'); 

const app = express(); 

app.set('port', (process.env.PORT || 3001)); 

if (process.env.NODE_ENV === 'production') { 
    app.use(express.static('frontend/build')); 
} 

app.post('/api/shows', bodyParser.json(), (req, res) => { 
    const data = req.body; 
    console.log(data); // shows {} 
}); 

本地所有這一切工作正常,但部署在heroku上的請求來自內容類型application/x-www-form-urlencoded而不是application/json,這就是爲什麼body-parser中間件不解析JSON的原因。

奇怪的是,這沒有工作幾天前,當我嘗試過一次,我不知道我在這一領域的任何變化在此期間。

儘管爲請求明確設置了什麼導致標題錯誤?無論如何,我可以配置中間件來讀取它,但這似乎是一種解決方法。我想了解問題的實際根本原因。

更新#1

我認爲這可能與URL設置做。使用來自命令行的curl請求來爲後端服務,使用http://my-app.herokuapp.com/api/shows時收到數據,但在使用http://myurl.info/api/shows時收不到數據。

回答

0

與往常一樣,發佈後不久我就知道了。這個問題實際上與應用程序無關。

我使用自己的URL通過提供商,並設置了一個reidrection myapp.herokuapp.com,這原來是問題。 Heroku explains in detail如何爲Heroku應用程序配置域,並按照該過程使用CNAME條目後,一切工作正常。

相關問題