在网站开发中,路由的设置非常关键。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. python基础使用

    Python 标识符 在python里,标识符有字母.数字.下划线组成. 在python中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. python中的标识符是区分大小写的. 以 ...

  2. [工具][windows][visualStudio][充电]番茄助手vaassist常见用法

    参考:http://blog.csdn.net/hotdog156351/article/details/43955565 1 安装好VAS打开VS2010之后,首先关闭VA outline与VA V ...

  3. 集合(Collection)使用笔记

    Collections.unmodifiableCollection这个可以得到一个集合的镜像,它的返回结果不可直接被改变,否则会提示 java.lang.UnsupportedOperationEx ...

  4. 【转】表删除时 Cannot delete or update a parent row: a foreign key constraint fails 异常处理

    转载地址:http://lijiejava.iteye.com/blog/790478 有两张表,结构如下: t_item:                          t_bid: id    ...

  5. http://www.bejson.com/go.html?u=http://www.bejson.com/demo2.html

    json 解析工具http://www.bejson.com/go.html?u=http://www.bejson.com/demo2.html

  6. UWP开发入门系列笔记之(一):UWP初览

    标签: 随着微软Build2015带来的好消息,Win10正式版发布的日子已经离我们越来越近了,我们也终于欣喜地看到:一个统一的Windows平台对于开发人员来说充满了吸引力,这局棋下的好大的说--于 ...

  7. shell脚本常见错误

    一.引言 想要学习使用shell脚本,却在开始的时候遇到很多不顺利,都是一些小细节的东西,所以在此记录一下. 二.各种细节问题 1.变量作为赋值对象时不需要添加$,取值时需要,也就是说,这个$就是取值 ...

  8. c++类中的常量

    C++类中的常量 由于#define 定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用 const 修饰数据成员来实现.const 数据成员的确是存在的,但其含义却不是我们所期望的.cons ...

  9. c++学习笔记2--constexpr,类型别名,auto

    constexpr:修饰常量表达式,约定修饰对象不仅为常量,而且在编译阶段就能得到值. 与const不同的是,constexpr约束的是当事人,就是说,constexpr int *a=1;这样的语句 ...

  10. WCF 自托管、无配置文件实现jsonp(跨域)的访问

    以下内容基于WCF4.0,本文将对比讨论配置文件方案和无配置文件方案的实现方式. WCF4.0加入了对RESTFU和标准终结点的支持,这为实现跨域提供了简单的方式. 一.有配置文件的情况: 首先我们先 ...