0

API 结果呈现到桌面,但不呈现到我的 iPhone。所以我有一个简单的休息 API,我正在从 ReactJS 前端进行调用。在超级代理遇到很多麻烦后,我正在使用 axios。我在任何浏览器控制台、桌面或移动设备中都没有收到任何错误(一直在使用 jsconsole 调试我的 iphone 5)。然而,在我的 Python Tornado 后端,它为桌面和移动设备抛出了一些错误:

第一个:

tornado.application:未捕获的异常 GET

第二:

错误:tornado.general:写入标头后无法发送错误响应错误:tornado.general:无法刷新部分响应

第三:

在处理上述异常的过程中,又出现了一个异常:

这可以作为我的 Python env 文件中发生的错误找到

TypeError:“str”对象不可调用

这些都没有使脚本/应用程序崩溃......这是我使用 axios 的 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 Tornado 位:

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 async,这就是为什么存在 async 和 await 的原因。除此之外,我确实删除了所有样式和 react-toolbox 的东西,只是为了确保它没有因此而渲染,并且没有任何区别。

我知道可能有很多事情我没有做,但我无法弄清楚那是什么,因为谷歌搜索任何错误只会返回少于 5 个相关结果。任何投入将不胜感激。谢谢!

哦 - 如果您想/需要查看整个项目,这里有一个指向我的 GitHub 存储库的链接。再次感谢!龙卷风定价者

编辑:

这是我在控制台中得到的: Python Tornado 错误

4

1 回答 1

0

我将此标记为已解决,因为没有任何错误可以解决,因此只需调试导致无法渲染到移动设备的问题。

于 2017-03-03T02:10:33.707 回答