2017-02-28 22 views
0

API結果呈現給桌面,但不呈現給我的iPhone。所以我有一個簡單的休息API,我從ReactJS前端進行調用。我在使用superagent後遇到了很多麻煩之後使用了axios。我沒有在任何瀏覽器控制檯,桌面或移動設備上發現任何錯誤(使用jsconsole來調試我的iphone 5)。然而,在我的Python龍捲風後端它拋出了幾個錯誤,爲臺式機和移動:Python龍捲風rest API調用不呈現給手機

1:

tornado.application:Uncaught exception GET

第二:

ERROR:tornado.general:Cannot send error response after headers written ERROR:tornado.general:Failed to flush partial response

3:

During handling of the above exception, another exception occurred:

和這可以找到我的Python環境文件中發生的錯誤

TypeError: 'str' object is not callable

沒有這崩潰的腳本/應用程序......這是我的ReactJS/JavaScript的使用愛可信:

componentDidMount() { 
    console.log('componentDidMount'); 

    const url = 'http://127.0.0.1:3000/api/generator'; 
    axios.get(url).then((response) => { 
     const results = response.data 
     console.log(JSON.stringify(results.data)) 
     this.setState({data: results.powergen}) 
    }) 
} 

render() { 
    const powergenName = this.state.data.map((powergen, i) => { 
     const pgBrand = new RegExp(this.state.brandSelected) 
     console.log(this.state.brandSelected) 
     if (pgBrand.test(powergen.name)) { 
      return <div className="row" key={i}><br/> 
       <Card style={{ 
        width: '250px' 
       }}> 
        <CardTitle title={powergen.price} subtitle={powergen.model}/> 
        <CardTitle title={powergen.name} subtitle={powergen.deal}/> 
       </Card> 
      </div> 
     } else 
      return false 
    }) 
    return (
     <div> 
      <Dropdown source={this.brands} onChange={this.handleBrandChange} value={this.state.brandSelected}/> 
      <div>{powergenName}</div> 
     </div> 
    ) 
} 

,這裏是我的Python龍捲風位:

class PowgenHandler(tornado.web.RequestHandler): 

def send_error(self, status_code=500, **kwargs): 
    """ 
    Generates the custom HTTP error.And always return 200 code. 
    """ 
    reason = None 
    if 'exc_info' in kwargs: 
     exception = kwargs['exc_info'][1] 
     if isinstance(exception, HTTPError) and exception.reason: 
      reason = exception.reason 
    try: 
     msg = reason if reason else httputil.responses[status_code] 
    except KeyError: 
     msg = "unkown error" 

    result = {"status_code":status_code, "reason": msg} 

    self.clear() 
    self.set_header("Content-Type", "application/json") 
    self.set_status(200) 
    self.write(tornado.escape.json_encode(result)) 
    self.finish() 

def set_default_headers(self): 
    print("setting headers!!!") 
    self.set_header("Access-Control-Allow-Origin", '*') 
    self.set_header("Access-Control-Allow-Headers", 'Content-Type') 
    self.set_header('Access-Control-Allow-Methods', 'GET') 
    self.set_header('Access-Control-Allow-Credentials', 'None') 

async def get(self): 
    output = [] 
    gn = db.generators.find() 
    for gens in (await gn.to_list(length=1000)): 
     output.append({'name': gens['name'], 
         'model': gens['model'], 
         'price': gens['price'], 
         'deal': gens['deal'], 
         'image': gens['image'], 
         'id': gens['gen_id']}) 
    self.write(json.dumps({'powergen': output})) 
    self.finish() 

這是相當直截了當所以我不明白爲什麼它不適用於我的iPhone。我想我還應該提到,我正在使用Motor for MongoDB異步,這就是爲什麼異步&等待在那裏。除此之外,我確實刪除了所有造型& react-toolbox的東西,只是爲了確保它不是因爲渲染而造成的,並沒有改變。

我知道有些東西可能是我沒有做的,但我無法弄清楚是什麼,因爲Google搜索任何錯誤只會返回少於5個相關結果。任何投入將不勝感激。謝謝!

哦 - 如果您想要/需要查看整個項目,請點擊此處鏈接到我的GitHub倉庫。再次感謝! Tornado-Pricer

編輯:

下面是我得到了我的控制檯: Python Tornado errors

+0

你可以包括龍捲風堆棧跟蹤?我懷疑send_error可能會以某種方式被破壞。 –

+0

好吧,最近剛剛添加了這一點,並且問題在之前發生。所以,去除這個結果的結果是一樣的。但是,我會編輯&顯示我的Python控制檯爲亞.. –

+0

我確實刪除send_error函數具有相同的結果... –

回答

0

我標誌着這是解決在目前還沒有任何錯誤去上班,因此它只是下跌調試任何導致不呈現給移動設備的問題。