想直接要结果的直接拉到文章底部就足够了
今天心血来潮想写个简易的API,想几个请求头token做一下验证
于是吟诗一首(
这是后端
直接访问API检测一下能不能用
成功是可用的!
这是前端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>CORS</title>
<script src="js/vue.global.js"></script>
<script src="js/axios.min.js"></script>
</head>
<body>
<div id="app">
{{ data }}
</div>
<script>
Vue.createApp({
mounted(){
const config = {
headers:{
"token": "can can need"
},
timeout: 1000
};
// 这个公网IP是假的(
axios.get("http://11.45.1.4:8090/test", config)
.then(result => {
this.data=result.data.message;
}).catch(err => {
console.log(err)
})
},
data(){
return {
data: undefined
}
}
}).mount("#app")
</script>
</body>
</html>
不错看上去没有什么毛病
让我打开前端看看能不能用
一瞬心肺停止了 ,不过这难不倒我,修改一下代码(黑色方框内为新增的)
编译一下等待通过,然后再打开一下前端检测一下
意料之中依旧是爆炸了
检查了一下是没有找到OPTIONS的/test的
这样就明白了啊!
最后更改一下
// HTTP
#define CPPHTTPLIB_OPENSSL_SUPPORT
httplib::Server svr;
//启动HTTP服务器
inline void startServer(void) {
auto ret = svr.set_mount_point("/", "./static");
svr.set_default_headers({
{ "Access-Control-Allow-Origin" , "*" },
{ "Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"},
{ "Access-Control-Max-Age", "3600"},
{ "Access-Control-Allow-Headers", "*"},
{ "Content-Type", "application/json;charset=utf-8"}
});
svr.Options("/test", [](const httplib::Request& ,httplib::Response& resp) {
std::cout << "OPTIONS ACCESS" << std::endl;
resp.status = 200;
});
svr.Get("/test", [](const httplib::Request& req, httplib::Response& resp) {
auto token{ req.get_header_value("token") };
std::cout << token << std::endl;
resp.set_content(R"-({"message":"Hello World!"})-", "application/json");
});
svr.listen("0.0.0.0", 8090);
}
再打开前端看看
好耶可以获取到API了
哦对不能忘记看看后台有没有内容
也有内容那就是成功了!
问题解决了,ummmm,接下来应该奖励自己摸一会鱼了吧……!
———————本文完———————