2017-02-28 1 views
0

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 werden

TypeError: '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

+0

Können Sie den Tornado-Stack-Trace einschließen? Ich vermute, dass send_error irgendwie kaputt sein könnte. –

+0

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 .. –

+0

Ich habe bestätigt, dass das Entfernen send_error Funktion hat die gleichen Ergebnisse ... –

Antwort

0

ich dies als gelöst markiert habe, da es keine Fehler sind zur Arbeit von so ist es nur nach unten zu debuggen, was auch immer das Problem verursacht, auf Mobile nicht zu rendern.

Verwandte Themen