从零开始学Node.js(二):HTTP/URL模块以及supervisor工具

从零开始学Node.js(二):HTTP/URL模块以及supervisor工具

文章目录

  • 从零开始学Node.js(二):HTTP/URL模块以及supervisor工具
      • 创建第一个Node.js应用
      • URL模块的使用
      • URL模块和HTTP模块的综合使用
      • Node.js自启动工具supervisor

  • IDE:VSCODE

注意:

  • 如果需要IDE提示的话,可以在Extension中搜索Node Snippets并安装,快捷键ctrl+shift+X,然后搜索就行了。
  • 如果修改了程序代码,记得保存,如果程序运行中的话那么需要ctrl+c终止,然后重新运行才可以生效。是不是觉得很麻烦,在本篇博客的末尾就介绍了自启动工具supervisor去解决这个问题。
  • VSCODE运行需要在terminal中输入node xx.js

创建第一个Node.js应用

​ ​ ​ ​ ​ ​ ​ 还记得以前用Java的时候,Tomcat就是web容器,自己不需要写http相关的内容,而这个Node.js需要自己写。既然创建第一个应用,那么就从写http模块开始吧。
​ ​ ​ ​ ​ ​ ​ 创建第一个应用,命名为app.js,输入http提示node-http-server,就会出现如下代码,以标准模板来简单介绍下。

//引入http模块
var http = require('http');
//创建web服务
http.createServer(function (request, response) {
     
  //设置响应头
  response.writeHead(200{
     'Content-Type': 'text/plain'});
  //在页面上输出一句话并结束响应
  response.end('Hello World');
  //表示监听的端口时8081
}).listen(8081);

console.log('Server running at http://127.0.0.1:8081/');

​ ​ ​ ​ ​ ​ ​ 大概了解http模块之后,那我们来手写一个吧,文件命名为http.js。

const http=require('http');

http.createServer((req,res)=>{
     
    //输出请求的url
    console.log(req.url);
    //设置响应头
    res.writeHead(200{
     "Content-type":"text/html;charset='utf-8'"});
    //解决中文乱码
    res.write("");
    res.write("

welcome to nayelya's blog

"
); res.write('这是我的第一个nodejs程序!'); res.end(); }).listen(8080);

​ ​ ​ ​ ​ ​ ​ 如果我们想要获取url中传过来的键值对,要如何获取呢?假设地址栏中的地址为http://127.0.0.1:8080/?name=nayelya&age=18,我们可以看到控制台中打印了/?name=nayelya&age=18,但实际上我们需要的是姓名nayelya和年龄18这两个值.那么如何获取呢?这就需要用到url模块了。

URL模块的使用

​ ​ ​ ​ ​ ​ ​ 我们经常使用URL模块中的下列三个方法。

url.parse()			//解析url
url.format()		//url.parse()的逆向操作
url.resolve(from,to)	//添加或替换地址

​ 解决显示key-value问题时,需要用到url.parse(),下面展示一下如何使用.新建一个url.js。

const url=require('url');

var api='http://baidu.com?name=nayelya&age=18';

console.log(url.parse(api));

​ ​ ​ ​ ​ ​ ​ 控制台打印信息如下,我们发现打印的东西还是和上一个demo中的path信息差不多,并非键值对的形式。

Url {
     
  protocol: 'http:',    
  slashes: true,        
  auth: null,
  host: 'baidu.com',    
  port: null,
  hostname: 'baidu.com',
  hash: null,
  search: '?name=nayelya&age=18',
  query: 'name=nayelya&age=18',
  pathname: '/',
  path: '/?name=nayelya&age=18',
  href: 'http://baidu.com/?name=nayelya&age=18'
}

​​ ​ ​ ​ ​ ​ ​ 那我们来小小的改造一下。url.parse(api,true),然后打印的信息就变成对象了,这样一来就方便获取某个key所对应的value了,再来操作一波。

Url {
     
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'baidu.com',
  port: null,
  hostname: 'baidu.com',
  hash: null,
  search: '?name=nayelya&age=18',
  query: [Object: null prototype] {
      name: 'nayelya', age: '18' },
  pathname: '/',
  path: '/?name=nayelya&age=18',
  href: 'http://baidu.com/?name=nayelya&age=18'
}

​ ​ ​ ​ ​ ​ ​ 接着我们通过tmp变量保存query中的内容,然后通过变量名.key的方式获取对应的value即可。

var tmp=url.parse(api,true).query;
console.log('姓名:'+tmp.name+' 年龄:'+tmp.age);

URL模块和HTTP模块的综合使用

​​ ​ ​ ​ ​ ​ ​ 我们需要将请求的url中的键值对信息打印到控制台上,那么就以之前的http.js为例进行url模块整合.那么首先需要知道和请求相关的信息保存在哪儿,毫无疑问是存放在req中了,但是req信息这么多(可以自行打印req看看输出结果),其实只有req.url有用。

const http=require('http');

http.createServer((req,res)=>{
     
    //输出请求的url
    console.log(req.url);
    //设置响应头
    res.writeHead(200{
     "Content-type":"text/html;charset='utf-8'"});
    //解决中文乱码
    res.write("");
    res.write("

welcome to nayelya's blog

"
); res.write('这是我的第一个nodejs程序!'); res.end(); }).listen(8080);

​ ​ ​ ​ ​ ​ ​ 打印的url除了我们请求的地址之外,还有就是请求小图标的地址(显然是没有用的),所以我们可以判断一下,把无用的请求地址过滤掉,代码如下!

const http=require('http');
const url=require('url');


http.createServer((req,res)=>{
     
    //设置响应头
    res.writeHead(200{
     "Content-type":"text/html;charset='utf-8'"});
    //解决中文乱码
    res.write("");
    res.write("

welcome to nayelya's blog

"
); res.write('这是我的第一个nodejs程序!'); //请求的url不是请求小图标时 if(req.url!='/favicon.ico'){ var userinfo=url.parse(req.url,true).query; console.log('姓名:'+userinfo.name+' 年龄:'+userinfo.age); } res.end(); }).listen(8080);

Node.js自启动工具supervisor

​ ​ ​ ​ ​ ​ ​ upervisor会不同间时应用下面的所有文件,发现有文件被修改,就重新载入程序文件,这样修改了文件之后可以马上看到变更后的结果!

npm install-g supervisor

​ ​ ​ ​ ​ ​ ​ 通过supervisor代替node命令启动程序。

你可能感兴趣的:(Node.js)