2017-08-24 69 views
0

做了一個express服務器來調用api。我們已經成功地在我們的服務器中請求了JSON對象。我們現在的問題是讓它在客戶端顯示爲完整的JSON對象。 json數據在服務器從api請求時被截斷。有什麼建議麼?我試過解析而不是stringify但得到這個錯誤。JSON響應中斷

SyntaxError: Unexpected end of JSON input
at Object.parse (native)
at fetch.then.x (/Users/server.js:26:19)
at process._tickCallback (internal/process/next_tick.js:103:7)

這裏是服務器代碼與stringify。

var express = require('express'); 
var fetch = require('node-fetch'); 
var cors = require('cors'); 
const util = require('util'); 
const app = express(); 
var inflate = require('inflation') 
var raw  = require('raw-body') 
const json = require('body-parser').json(); 

app.use(cors()) 

const PORT = 3001 
app.listen(PORT,() => { 
    console.log(`Express server is running on port: ${PORT}!`); 
}); 

app.get('/foo', (req,res) => { 
    let dataUrl = 'www.apiURL.com/data.json'; 
    fetch(dataUrl) 
    .then(x => { 
    console.log(x.body._readableState.buffer.head.data.toString()) 
    let decompressed = inflate(x.body._readableState.buffer.toString()); 
res.send(JSON.stringify(x.body._readableState.buffer.head.data.toString())); 
    }) 
    .catch(err => console.log(err)) 
}) 

這是客戶端代碼。

componentDidMount(){ 
fetch(serverUrl) 
.then(res => { 
    res.json() 
    .then(body => { 
    this.setState({ 
     clubData: body 
    }) 
    console.log(res) 
    }); 
}) 
.catch(err => console.log(err)) 

爲什麼數據被切斷?當它是字符串形式時無關緊要,因爲緩衝區也被切斷了。

回答

0

您的客戶端代碼應該如下所示。

componentDidMount(){ 
    fetch(serverUrl) 
    .then(res => res.json()) 
    .then(body => 
    this.setState({ 
     clubData: body 
    })) 
    .catch(err => console.log(err)) 
} 

讓我知道如果這能解決您的問題,如果有是其他的東西我失蹤

+0

感謝羅蘭我可以更新的答案!儘管我得到了同樣的答覆。無法弄清爲什麼JSON會被切斷! –

+0

您可以將console.log放在服務器和客戶端中,並使用結果更新問題嗎? – Rowland