在网站开发中,路由的设置非常关键。nodejs对路由处理封装了一个比较全面的模块。

来认识下url模块

1)在命令行(cmd)可以直接 node —> url 可直接查看url模块的所有方法。

2)在js中通过require调用url模块。var url = require('url');

url包括:parseresolveresolveObjectformat四个方法。

1)parse:

parse用来解析url地址。同样可以直接用命令行(cmd)调用,也可以在js中通过url模块使用。

例1:解析一个合法url

var url = require('url');
/*解析url*/
function parse_url(){
return url.parse("https://www.baidu.com/");
}
console.log(parse_url());

执行结果:

parse方法提供了比较全面的解析。

protocol:底层使用的协议(比如:http,ftp,https等等)

slashes:url是否有双斜线

host:url的域名或IP地址

port:端口

hostname:主机名

hash:锚值(解析页面锚点,带#号的锚链接)

search:查询字符串参数(url连同?后面的参数一起,通常是请求参数)

query:向服务器请求的参数(这里的值和search非常像,只是少一个问号)

pathname:访问资源路径名(网站资源页,或资源的路径名)

path:路径

注:pathname和path的区别:pathname只资源路径(从url的com后的/开始一直到?中间的值),而path获取的是除域名或ip外的全部路径(从url的com后的/开始一直到url结束)

href:完整的url字符串。

这些属性都可以通过url.parse直接调用获取对应值。例如:url.parse("http://www.baidu.com").path (直接获取url的路径值)

例2:解析一个相对复杂的url

var url = require('url');
/*解析url*/
function parse_url(){
return url.parse("https://www.baidu.com:8080/map/list?id=125&name=tom#top");
}
console.log(parse_url());

执行结果:

parse第二,三个参数,parse的第二和第三个参数是可选参数,如果不加默认第二,三参数为false。

parse第二个参数:

用来将query的值解析为对象。

例:

var url = require('url');
/*解析url*/
function parse_url(){
return url.parse("https://www.baidu.com:8080/map/list?id=125&name=tom#top",true);
}
console.log(parse_url());

执行结果:

仅仅是query返回结果有变化,其他结果不变。

parse第三个参数:

用来解析不带明显请求协议的url,例如://192.168.1.1:8080/login

例:

var url = require('url');
/*解析url*/
function parse_url(){
return url.parse("//192.168.1.1:8080/longin?name=admin&pwd=admin",true,true);
}
console.log(parse_url());

执行结果:

注意:对比加了第三个参数和不加第三个参数parse出来的结果对比。

2)format:

format接受一个包含protocol,slashes,auth,host,port,hostname,hash,search,query,pathname,path的对象,生成一个合法的url。同样可以直接用命令行(cmd)调用,也可以在js中通过url模块使用。

例:

var url = require('url');
/*生成url*/
function parse_url(){
return url.format({
protocol: 'www.baidu.com:',
slashes: null,
auth: null,
host: '8080',
port: null,
hostname: '8080',
hash: null,
search: '?name=admin&pwd=admin',
query: 'name=admin&pwd=admin',
pathname: '/longin',
path: '/longin?name=admin&pwd=admin',
});
}
console.log(parse_url());

执行结果:

3)resolve

接受 域名(或ip地址) 和 路径 生成完整url。同样可以直接用命令行(cmd)调用,也可以在js中通过url模块使用。

例:

var url = require('url');
/*生成url*/
function parse_url(){
return url.resolve("http://www.soso.com","/map/chain");
}
console.log(parse_url());

执行结果:

**************************************************************************************************************

url模块对服务器交互起到至关重要的作用。

以上详解的三个方法属于url常用方法,也是nodejs官网具体介绍的三个。

nodejs学习笔记<三>关于路由(url)的更多相关文章

  1. NodeJS学习笔记 (12)网络地址解析-url(ok)

    模块概述 nodejs中,提供了url这个非常实用的模块,用来做URL的解析.在做node服务端的开发时会经常用到.使用很简单,总共只有3个方法. 正式讲解前,各位同学先把下面这个图记在心上(来自no ...

  2. nodejs学习笔记三——nodejs使用富文本插件ueditor

    在做自己的nodejs项目的时候遇到需要使用ueditor.原来下载的是ueditor的jsp版本.目录如下  在ueditor.config.js中有配置服务器home路径(这个home路径能找到u ...

  3. NodeJS学习笔记 - Express4.x路由操作

    一.为Express添加about路由 1.新建js文件,about.js 2.打开about.js,并输入以下代码: var express=require('express'); var rout ...

  4. NodeJS学习笔记三

    map map对象是一个简单的键/值映射.任何值(包括对象和原始值)都可以用作一个键或一个值. var m = new Map(); var o = {p: "Hello World&quo ...

  5. nodejs学习笔记三(用户注册、登录)

    1.定接口      /user 接口               输入    act=reg&user=aaa&pass=123456               输出     {& ...

  6. Nodejs学习笔记(三)——一张图看懂Nodejs建站

    前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...

  7. Nodejs学习笔记(四)——支持Mongodb

    前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...

  8. Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识

    目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...

  9. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

随机推荐

  1. android 数据库操作详解

    请看郭大神的八篇专栏,包含sql语句  android封装的databasehelper 和郭大神自己的LitePal  三种使用详解 http://blog.csdn.net/column/deta ...

  2. 【转】学习总结--Cookie & Session总结

    转载地址:http://www.phperzone.cn/portal.php?aid=718&mod=view 一.状态管理 1)什么是状态管理?   将浏览器与web服务器之间多次交互过程 ...

  3. app framework map及ajax方法

    $(function () { $.ajax({ url: 'Ashx/GetProductList.ashx', contentType: "JSON", success: fu ...

  4. linux主次设备号介绍

    1.主设备号与次设备号的功能 在Linux内核中,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务:而次设备号则用来标识具体且唯一的某个设 ...

  5. SharePoint API测试系列——对Recorded Item做OM操作(委托的妙用)

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对Recorded Item动态调用OM Methods进行测试,界面如下: 输入Site的URL ...

  6. vs智能提示突然消失的解决办法 (vs2008 vs2010 vs2012 智能提示)

    vs智能提示突然消失的解决办法 (vs2008 vs2010 vs2012 智能提示) 下面一段话是网上找到的解决方案: 重置Visual Studio可以解决此问题,方法是从开始->Micro ...

  7. sass的安装与基础

    安装教程:http://www.haorooms.com/post/sass_css 手册:http://sass.bootcss.com/docs/guide/     http://www.w3c ...

  8. WebForm分页浏览

    1.封装类 //封装类 using System; using System.Collections.Generic; using System.Web; /// <summary> // ...

  9. 解决discuz论坛搬家:“Table ‘common_syscache’ is read only”问题

    解决discuz论坛搬家:“Table ‘common_syscache’ is re http://www.zixuephp.com/wzht/discuz/20141203_11562.html ...

  10. 电量检测芯片BQ27510使用心得

    最近接触到一款TI的电量检测芯片BQ27510,网上很少有人提及该芯片如何使用,大部分博文都是搬得BQ27510的datasheet,至于真正使用过的很少,该芯片我个人感觉还是非常强大的,能自动学习你 ...