Javascript 瓶子无法识别Axios.json帖子

Javascript 瓶子无法识别Axios.json帖子,javascript,python,cors,bottle,axios,Javascript,Python,Cors,Bottle,Axios,我正在尝试使用Axios向用Python编写的后端发出post请求 问题是,当请求被激发时,我得到了一个500内部 首先,这里是Axios请求代码: const data = {date: formatDate(date), titles} post(`${API_URL}/save_day_titles`, data) .then(res => { console.log('response success', {...res}); }) .catch(res =&g

我正在尝试使用Axios向用Python编写的后端发出post请求

问题是,当请求被激发时,我得到了一个
500内部

首先,这里是Axios请求代码:

const data = {date: formatDate(date), titles}
post(`${API_URL}/save_day_titles`, data)
  .then(res => {
    console.log('response success', {...res});
  })
  .catch(res => {
    console.log('response', {...res});
  });
瓶子代码:

@planApi.route('/api/v3.6/save_day_titles', method=['POST', 'OPTIONS'])
def plan_save():
    date = request.json['date']
    titles = request.json['titles']
    plan = {
        'date': datetime.datetime.strptime(date, '%Y-%m-%d'),
        'titles': titles 
    }
    id = titlesMongo.insert_one(plan).inserted_id
    return {"id": str(id), "plan_date": date, "planification": titles}
web控制台中记录的错误非常简单:

选项xxx/api/v3.6/save_day_titles 500(内部服务器错误)

XMLHttpRequest无法加载xxx/api/v3.6/save_day_标题。对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。因此,不允许访问源“”。响应的HTTP状态代码为500

它看起来像一个CORS,但我做了很多其他请求(get请求),没有CORS错误。。。无论如何,当我尝试在服务器中记录正文时,例如:
print request.body.parse()
日志是:

127.0.0.1---[2017年8月17日18:18:45]“POST/api/v3.6/save_day_titles HTTP/1.0”500 765
b“

奇怪的是,对于CURL,请求成功了:

curl -H "Content-Type: application/json" -X POST -d '{ "date": "2017-08-15", "titles": [{"title": "title test", "url":"xxx/xxx", "category": "category test"}] }' "xxx/api/v3.6/save_day_titles".
curl -H "Content-Type: application/json" -X POST \-d '{ "date": "2017-08-15", "titles": [{"title": "title test", "url":"xxx/xxx", "category": "category test"}] }' "xxx/api/v3.6/save_day_titles".
Axios配置似乎正常:

date: "{"date":"2017-08-01","titles":[{"title":"title test","url":"xxx/xxx","category":"category test"}]}"
headers:
  Accept: "application/json, text/plain, */*"
  Content-Type: "application/json;charset=utf-8"
所以,我在这里被绊住了,想不出问题所在,知道吗?暗示

提前感谢。

您的浏览器正在运行,但当服务器收到请求时,服务器出现了一些内部故障,因此服务器会返回500错误响应

当服务器出现内部故障并发送500个错误响应时,它不会添加
访问控制允许源站
响应头,因此您最终会看到CORS错误消息

因此,真正的问题不是CORS错误,而是服务器中的一些内部问题,因此,要找到解决方案,您需要查看服务器端的服务器日志,并查看服务器在发生错误时记录的关于原因的消息

奇怪的是,对于CURL,请求成功了:

curl -H "Content-Type: application/json" -X POST -d '{ "date": "2017-08-15", "titles": [{"title": "title test", "url":"xxx/xxx", "category": "category test"}] }' "xxx/api/v3.6/save_day_titles".
curl -H "Content-Type: application/json" -X POST \-d '{ "date": "2017-08-15", "titles": [{"title": "title test", "url":"xxx/xxx", "category": "category test"}] }' "xxx/api/v3.6/save_day_titles".
这是在测试一个
POST
请求。你的浏览器从来没有时间发布
帖子
;取而代之的是,它首先执行一次,但当它收到对该
选项
请求的
500
错误响应时,这是飞行前的故障,因此浏览器永远不会继续执行
POST

因此,要使用
curl
模拟浏览器行为,首先需要发送
OPTIONS
请求:

curl -X OPTIONS -i -H 'Origin: http://localhost:3000' \
    -H 'Access-Control-Request-Method: POST' \
    -H 'Access-Control-Request-Headers: Content-Type' \
    xxx/api/v3.6/save_day_titles
这将使服务器返回与您在浏览器中看到的相同的500错误响应

请注意,浏览器这样做的原因是前端JavaScript代码正在添加
内容类型:application/json
请求头,这是触发浏览器进行预飞行的条件之一