在网站开发中,路由的设置非常关键。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. 每日一九度之 题目1043:Day of Week

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7336 解决:2563 题目描述: We now use the Gregorian style of dating in Russia. ...

  2. c#danliemosih

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 打印机 ...

  3. android post请求

    参考文章:http://blog.csdn.net/lotusyangjun/article/details/22292445 http://blog.csdn.net/withiter/articl ...

  4. 使用main方法调用http请求本地服务器的某个servlet报错问题

    java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8081/test/myS ...

  5. SQL 数据类型,增删改查语句

    数据类型: --类似于C#中的数据类型 Datetime   范围是:1753.1.1-- 9999.12.31 Smalldatetime      1900.1.1 --2079.6.6 操作: ...

  6. linux 开启wifi热点

    1,在网络连接管理中创建一个wifi连接,点击 Add,然后选Wi-Fi 2,设置wifi热点名字.wifi接连名字 3,设置 Mode 选 Ad-hoc,其它默认. 4,在 Wi-Fi Securi ...

  7. 【MySQL】MySQL的Sequence

    Oracle的Sequence用爽了,发现MySQL没有Sequence,那么,自己写一个呗. > 最简单的实现 先建一个表存储当前值: CREATE TABLE `t_sequence` ( ...

  8. What Your Computer Does While You Wait

    转: CPU的等待有多久? 原文标题:What Your Computer Does While You Wait 原文地址:http://duartes.org/gustavo/blog/ [注:本 ...

  9. UIView如何管理它的子视图

    UIView提供了很多建立和管理视图的方法. 1.添加视图 insertSubview:atIndex:   //放在子视图数组的具体索引位置 insertSubview:aboveSubview:  ...

  10. eclipse中LogCat有时不显示信息的简单解决办法

    android的开发中,经常需要使用到LogCat查看打印的信息. 但是eclipse中的LagCat,有时会刷新不出打印的日志. 特别是在点击ClearLog按钮后,经常会出现上面说的这种情况. 一 ...