当前位置:首页 » 《随便一记》 » 正文

4Http模块、Url模块_quanxiaobai_的博客

17 人参与  2021年12月24日 15:58  分类 : 《随便一记》  评论

点击全文阅读


  • 如果我们使用PHP来编写后端的代码时,需要Apache或者Nginx的HTTP 服务器,来处理客户端的请求相应。不过对于Node.js来说,概念完全不一样了。使用Node.,js时,我们不仅仅在实现一个应用,同时还实现了整个HTTP服务器。
  • 我们创建NodeJs项目的时候,路径不要有中文和空格
  • 开发工具建议使用vscode,然后我们安装nodejs的提示插件:Node Snippets

 

 

 

 

测试一下node的http服务器

app.js

//导入http模块
const http = require('http');

/*
    (req,res)=>{}是一个匿名函数,跟function(req,res){}一样其实,只不过这这是ES6的写法罢了
 */
http.createServer((req,res)=>{

    console.log(req.url);//打印以下请求看看

    //设置响应头
    //状态码200,文件类型html,字符集utf-8
    res.writeHead(200,{"Content-type":"text/html;charset='utf-8'"});
    res.write('my node.js');
    res.end();//结束响应。一定要结束响应,不然客户端会一直加载。
}).listen(3000);//监听3000端口

 

命令行运行app.js

node app.js

 

浏览器输入:localhost:3000
得到以下页面
在这里插入图片描述

 

用Chrome进行调试查看发送了多少个请求

  • 终端打印的结果
    在这里插入图片描述
  • 第一个请求
    在这里插入图片描述
  • 第二个请求(说明一下,这个请求是请求网页开头那个图标的)
    在这里插入图片描述

 

 

 

 

url模块

  • url模块可以用来解析url

下面演示一下url模块

const url = require('url');

var api = 'https://www.baidu.com?name=zhangsan&age=21';

// console.log(url.parse(api));
/*
    Url {
  protocol: 'https:',   
  slashes: true,        
  auth: null,
  host: 'www.baidu.com',
  port: null,
  hostname: 'www.baidu.com',
  hash: null,
  search: '?name=zhangsan&age=21',
  query: 'name=zhangsan&age=21',
  pathname: '/',
  path: '/?name=zhangsan&age=21',
  href: 'https://www.baidu.com/?name=zhangsan&age=21'
}
 */

//我们再传递一个参数true,即可把query封装成一个对象
// console.log(url.parse(api,true));
/*
    Url {
  protocol: 'https:',
  slashes: true,
  auth: null,
  host: 'www.baidu.com',
  port: null,
  hostname: 'www.baidu.com',
  hash: null,
  search: '?name=zhangsan&age=21',
  query: [Object: null prototype] { name: 'zhangsan', age: '21' },
  pathname: '/',
  path: '/?name=zhangsan&age=21',
  href: 'https://www.baidu.com/?name=zhangsan&age=21'
}
*/
var temp = url.parse(api,true).query;
console.log(temp);//[Object: null prototype] { name: 'zhangsan', age: '21' }
console.log(temp.name);//zhangsan
console.log(temp.age);//21

 

下面演示在实际node的http服务器中如何使用url模块

//导入http模块
const http = require('http');
//导入url模块
const url = require('url');

http.createServer((req,res)=>{

    console.log(req.url);//打印以下请求看看

    //设置响应头
    //状态码200,文件类型html,字符集utf-8
    res.writeHead(200,{"Content-type":"text/html;charset='utf-8'"});

    //打印一下req里面有什么
    // console.log(req);
    /*
        req里面有很多很多东西,其中就包括了url
    */
   
    //其中url又有两条(实际开发中会有很多种情况),我们过滤掉这条
    if(req.url != '/favicon.ico'){
        var query = url.parse(req.url,true).query;
        /*
            query = JSON.parse(temp);
            这里如果用JSON.parse的话它会报错,原因是因为传了个undefined,但明明没有传undefined
            我也不知道... ... 
        */
        console.log(query.name);//zhangsan
    }
    // console.log(temp);//[Object: null prototype] { name: 'zhangsan' }
    /*
        https://blog.csdn.net/weixin_44710964/article/details/103552999
        当出现[Object: null prototype]我们可以先对对象进行JSON字符串转化(JSON.stringify()),
        然后再转化成对象(JSON.parse()),这样就可以去除了(以下方法对遇到[Object: null prototype]都通用)
    */
    
    //晕,好像还是不行

    res.end();//结束响应。一定要结束响应,不然客户端会一直加载。
}).listen(3000);//监听3000端口

实际上这种方法官方文档里面已经列为废弃的方法了,所以会有一些问题,下面介绍最新的方法。

 

参考:https://blog.csdn.net/weixin_44710964/article/details/103552999

//导入url模块
const url = require('url');

//node官方文档最新处理url方法
var obj = new URL('http://www.zcq.com/fafe?name=zhangsan&age=18');//前面一定要http://或https://不然报错
// console.log(obj);
/*
    URL {
  href: 'http://www.zcq.com/fafe?name=zhangsan&age=18',
  origin: 'http://www.zcq.com',
  protocol: 'http:',
  username: '',
  password: '',
  host: 'www.zcq.com',
  hostname: 'www.zcq.com',
  port: '',
  pathname: '/fafe',
  search: '?name=zhangsan&age=18',
  searchParams: URLSearchParams { 'name' => 'zhangsan', 'age' => '18' },
  hash: ''
}
*/

// console.log(obj.searchParams);//URLSearchParams { 'name' => 'zhangsan', 'age' => '18' }

//获取到name和age
console.log(obj.searchParams.get('name'));//zhangsan
console.log(obj.searchParams.get('age'));//18

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/32083.html

模块  请求  响应  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • [糙汉嘴软心硬,娇妻日日晚起]小说精彩节选免费试读_「黎夏顾卫城」主线最终章倒计时
  • 我的亲妹妹我当做畜生,只有儿子来救我反转剧情试读片段_[***小宝李小翠]精彩章节免费试读
  • 往梦难复温,沈淮霆宋思予在线_往梦难复温,沈淮霆宋思予在线
  • 爱意清浅随风离(简凝夕陆靳燃),爱意清浅随风离
  • 「冲喜而已,侯爷别太爱」小说免费在线阅读_侯府侯爷乐瑶主线最终章倒计时
  • 好看的往梦难复温沈淮霆宋思予_往梦难复温沈淮霆宋思予
  • 天才京剧花旦被废嗓后成为芭蕾舞王+后续+结局(秦意宋笙)全书秦意宋笙结局_秦意宋笙+结局列表_笔趣阁(天才京剧花旦被废嗓后成为芭蕾舞王+后续+结局)
  • (番外)+(全书)往梦难复温(沈淮霆宋思予+番外+全书)_(往梦难复温+番外+全书)免费_笔趣阁(沈淮霆宋思予)
  • 江晚烟陆聿我终于失去了你结局+番外(江晚烟陆聿)列表_江晚烟陆聿我终于失去了你结局+番外(江晚烟陆聿)结局篇+番外在线
  • 池雾陆砚寒结局+番外(陆砚寒池雾)列表_池雾陆砚寒结局+番外(陆砚寒池雾)池雾陆砚寒结局+番外在线
  • 沈静怡傅励行+后续+结局(傅励行沈静怡)列表_沈静怡傅励行+后续+结局(傅励行沈静怡)沈静怡傅励行+后续+结局在线
  • 非典时,我被妻子的白月光误诊遗弃在病房节选角色羁绊特辑‌_田越苏雅白月光角色专属支线试读入口

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1