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 错误