美文网首页
2018-10-23 jQuery获取node服务器数据

2018-10-23 jQuery获取node服务器数据

作者: 不知道取个什么昵称不如娶个媳妇 | 来源:发表于2018-10-23 19:26 被阅读4次

安装模块

cnpm/npm i mime -g/D
cnpm/npm i iconv-lite -g/D
cnpm/npm i bufferhelper -g/D

引入模块

const http = require("http"),//http模块 node核心模块之一 创建server服务器使用
      urlModule = require("url"),//引入url模块,解析url对象使用
      mime = require("mime"),//引入mime模块,读取任何类型的文件
      lite = require("iconv-lite"),//编码模块
      bufhelp = require("bufferhelper"),//buffer辅助模块
      fs = require("fs"); //文件系统模块

具体实现

//文件目录 这涉及到文件能否被读取的问题
const path = __dirname;
//创建server
const sever = http.createServer(function(req,res){
    //解析req.url
    urlObj = urlModule.parse(req.url,true);//第二个参数为true则把查询字符串也转换为对象
    //把查询字符串提取出来保存
    var keyword = urlObj.query.keyword;
    //服务端打印请求文件路径
    console.log("请求的文件路径:" , path+urlObj.path);
    //写入头头信息,包含所有文件mime类型
    res.writeHead(200 ,{"Content-Type":mime.getType(path+urlObj.path)});
    //如果是主页 则返回主页
    if(req.url === "/" || req.url === "index.html"){
       
        fs.readFile("index.html",function(err,data){
            res.end(data);
        })
    }
    //如果是Google浏览器请求图标,找到图标返回
    else if(req.url === "/favicon.ico"){
        cbreadFlie(path+urlObj.path,res) ;
    }
    //如果查询字符串不为空,则使用get请求获得数据
    else if(keyword){
            console.log(keyword);
            console.log(urlObj.query)
            console.log(urlObj.path)
            var url = `http://www.bookschina.com/book_find2/ajax/?action=${keyword}&keyword=${keyword}`;
            //get请求其他服务器的数据
            http.get(url,(res_data)=>{
                var bufferhelper = new bufhelp();
                res_data.on("data",(chunk)=>{
                    bufferhelper.concat(chunk);
                
                });
                res_data.on("end",()=>{
                    const html = lite.decode(bufferhelper.toBuffer(),'GBK');//转化编码
                    res.end(html);
                });
            });
    }else{
        //如果是其他mime类型的文件直接调用
        cbreadFlie(path+urlObj.path,res) ;
    }
   
});

sever.listen(3000);//设置监听端口
console.log("启动完成!");
//自定义函数,读取任何类型的文件
function cbreadFlie(url,res){
    fs.readFile(url,function(err,data){
        if(err) return ;  
        res.end(data);
    });
} 

html请求页面代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Page Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="/include/jquery-3.3.1.min.js"></script>
</head>
<body>
    <div id="app">
        <input type="text">
        <button id="btn">anniu</button>

        <p id = "keyword">
            
        </p>
    </div>
    <script>
        $("#btn").on("click",function(){
            $.get({
                url:"http://localhost:3000/suggest",
                data:{
                    keyword:$("#app input").val()
                },
                success:function(data){
                    var data = JSON.parse(data);
                    var html = "";
                    if(data.length === 0){
                        html=`<div>没有查询到任何东西</div>`;
                    }
                    // console.log(data);
                    data.forEach(element => {
                        html+= `<div>${element.label}</div>`
                    });
                    $("#keyword").html(html);
                }
            })
        })
    </script>
</body>
</html>

相关文章

网友评论

      本文标题:2018-10-23 jQuery获取node服务器数据

      本文链接:https://www.haomeiwen.com/subject/aqzazftx.html