API-Ergebnisse rendern auf dem Desktop, aber nicht auf meinem iPhone. Also habe ich eine einfache Rest-API, die ich von einem ReactJS-Frontend aus anrufe. Ich benutze Axios, nachdem ich eine Menge Probleme mit Superaktivität hatte. Ich bekomme keine Fehler in irgendeiner Browserkonsole, auf dem Desktop oder auf dem Handy (benutze jsconsole, um mein iPhone 5 zu debuggen). Doch auf meinem Python Tornado zurück Ende, das es wirft ein paar Fehler sowohl für Desktop- und mobile:Python Tornado Rest API-Aufrufe, die nicht auf Mobilgeräte gerendert werden
1. Platz:
tornado.application:Uncaught exception GET
2.:
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:
und Dies kann als der Fehler in meinen Python Env-Dateien
gefunden werdenTypeError: 'str' object is not callable
nichts davon stürzt das Skript/app ... mein ReactJS hier/Javascript verwenden axios:
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>
)
}
und hier ist mein Python Tornado-Bit:
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()
Es ist ziemlich geradlinig Ich verstehe also nicht, warum es auf meinem iPhone nicht funktioniert. Ich denke, ich sollte auch erwähnen, dass ich Motor für MongoDB async verwende, weshalb die asynchronen & erwarten, sind da. Ansonsten habe ich das gesamte Styling-Tool entfernt, um sicherzustellen, dass es nicht gerendert wurde und es keinen Unterschied machte.
Ich weiß, dass es etwas gibt, was ich nicht mache, aber ich kann nicht herausfinden, was das ist, da Google bei der Suche nach einem der Fehler nur mit weniger als 5 relevanten Ergebnissen zurückkommt. Jede Eingabe würde sehr geschätzt werden. Vielen Dank!
oh - hier ist ein Link zu meinem GitHub Repo für Sie, wenn Sie das gesamte Projekt sehen wollen/müssen. Danke noch einmal! Tornado-Pricer
EDIT:
Hier ist, was ich in meiner Konsole erhalten: Python Tornado errors
Können Sie den Tornado-Stack-Trace einschließen? Ich vermute, dass send_error irgendwie kaputt sein könnte. –
Nun, dieses Bit wurde erst kürzlich hinzugefügt und das Problem war schon mal passiert. Also endet die Entfernung mit den gleichen Ergebnissen. Aber yeah, ich bearbeite und zeige meine Python-Konsole für ya .. –
Ich habe bestätigt, dass das Entfernen send_error Funktion hat die gleichen Ergebnisse ... –