0.前言
1.客户端直接写 网易或者天气等第三方接口会报跨域
2.所以需要客户端向服务端发请求,来获取数据
3.服务端根据客户端的请求去获取天气,新闻,等接口
然后把数据给客户端
1.客户端 html
<button>请求网易数据</button> <script> $("button").click(function(){ $.ajax({ url:"http://127.0.0.1:9111/api", type:"get", dataType:"json", success:function(data){ console.log(data) } }) }); </script>
2.服务端
const http = require("http"); const fs = require("fs"); const url = require("url"); http.createServer(function (req,res) { res.writeHead(200, { "content-type": "text/html;charset=utf-8" }); let urlObj = url.parse(req.url, true); let pathname = urlObj.pathname; if(/(.*)\.html$/.test(pathname)) { let rs = fs.createReadStream(__dirname + pathname); rs.pipe(res); } else if (pathname === "/api") { // 让node向网易服务器发起网络请求, // http模块负责,底层实现是C++的不存在同源策略 //填入网址 比如 百度 英雄联盟英雄介绍的接口等等 let netUrl = "" // 发起请求 注意不要简写res上面服务器监听已经是res了!!! http.get(netUrl, function (response) { // 回调里的response不是请求的结果 和post请求很像 // 是一个对象,我们需要监听该对象的data和end事件来拼接保存最终的数据 let allData = ""; response.on("data", function (chunck) { allData += chunck; }); response.on("end", function () { res.end(allData); }); }); } else { res.end(); } }).listen(9111)
3.其实很多情况下,都可以通过后台转发请求,
比如天气类接口,股票信息类等
这种转发其实也是
node
的一个应用 中间件中间件就是中间层 这只是初识
4.Tips
注意还是上个章节 以服务器端口号打开客户端网页,不要用传统方式打开网页 会跨域
http://127.0.0.1:服务器写的端口/网页名字