2017-08-24 71 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