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
你可以包括龍捲風堆棧跟蹤?我懷疑send_error可能會以某種方式被破壞。 –
好吧,最近剛剛添加了這一點,並且問題在之前發生。所以,去除這個結果的結果是一樣的。但是,我會編輯&顯示我的Python控制檯爲亞.. –
我確實刪除send_error函數具有相同的結果... –