/*
要为程序提供请求的 URL 和其他需要的 GET 及 POST 参数,随后程序需要根据这些数据来执行相应的代码。
因此,需要查看 HTTP 请求,从中提取出请求的 URL 以及 GET/POST 参数。
需要的所有数据都会包含在 request 对象中,该对象作为 onRequest() 回调函数的第一个参数传递( onRequest()方法是 http.createServer()方法的参数,如下实例 )。但是为了解析这些数据,需要额外的 Node.JS 模块,分别是 url 和 querystring 模块。 url.parse(request.url).query
|
url.parse(request.url).pathname |
| |
| |
------ -------------------
http://localhost:8888/start?foo=bar&hello=world
--- -----
| |
| |
querystring.parse(queryString)["foo"] |
|
querystring.parse(queryString)["hello"] 也可以用 querystring 模块来解析 POST 请求体中的参数
*/
//===============================以下代码为main.js文件中内容==========================================
var server = require("./server");
var router = require("./router");
//调用server对象的start方法,并将router对象的route方法做为参数传过去
server.start(router.route);
//===============================以上代码为main.js文件中内容========================================== //===============================以下代码为server.js文件中内容==========================================
var http = require("http");
var url = require("url"); function start(route) {
function onRequest(request, response) {
/*
request.url : 从域名端口号8888后的所有字符串,若地址结尾有/,则 request.url 值结尾也有。
此例访问地址为 http://127.0.0.1:8888/start/work?foo=bar&hello=world/ 则 request.url 值为 /start/work?foo=bar&hello=world/ 打印url.parse(request.url);可以发现
url.parse(request.url).pathname = /start/work
url.parse(request.url).query = foo=bar&hello=world/
*/ var pathname = url.parse(request.url).pathname;
var query = url.parse(request.url).query; //这个判断如不加则会有两次请求,第二次请求是浏览器为获取收藏夹显示的图标而发送的
/*
if(pathname == '/favicon.ico'){
response.end();
return;
}
*/
console.log("pathname : " + pathname);
console.log("query : " + query);
//console.log(url.parse(request.url));
//调用传过来的方法名,将值传入该方法并调用
route(pathname);
route(query); response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
} http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
//start();
exports.start = start;
//===============================以上代码为server.js文件中内容========================================== //===============================以下代码为router.js文件中内容========================================== function route(pathname) {
console.log("About to route a request for " + pathname);
}
exports.route = route; //===============================以上代码为router.js文件中内容========================================== /*
执行main.js
node main.js
输出内容:
Server has started.
pathname : /start/work
query : foo=bar&hello=world/
About to route a request for /start/work
About to route a request for foo=bar&hello=world/
pathname : /favicon.ico
query : null
About to route a request for /favicon.ico
About to route a request for null 可以看到发送了两次请求,第二次的/favicon.ico是浏览器请求的,浏览器为在收藏夹中的显示图标.默认为favicon.ico.而自动发出的请求的目标URL地址
若想过滤掉该请求,可打开server.js中的if条件
*/

Node js路由的更多相关文章

  1. Node.js 路由

    我们要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码. 因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数.这一功能应当属 ...

  2. node.js 路由详解

    路由的基本使用 第一步:获取url跟目录下的字符 var http = require('http'); var url = require('url') http.createServer(func ...

  3. node.js - 路由、中间件、mysql

    这几天天天搞到这么晚,我看今天的内容看起不多啊,不知道为什么学着学着就到了这么晚.今天的内容还是有点多哈,有点自我矛盾了,再次一一道来. 1. 首先今天先看到路由的概念,什么叫做路由? 路由就是映射关 ...

  4. 12、Node.js 路由

    这里实现的好像就是把路由和服务器相结合起来.具体需要引入 url 模块和 http 模块为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码需要 ...

  5. Node.js Web 开发框架大全《路由篇》

    这篇文章与大家分享优秀的 Node.js 路由(Routers)模块.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  6. Node.js:路由

    ylbtech-Node.js:路由 1.返回顶部 1. Node.js 路由 我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码. 因 ...

  7. Node.js学习 - Route

    Node.js 路由 URL解析,需要url和querystring两个模块url.parse(string).query | url.parse(string).pathname | | | | | ...

  8. [Node.js] 07 - Html and Http

    前言 一.原本的计划 Node.js 路由 Node.js GET/POST请求 到此,有必要复习下http章节 Node.js Web 模块 Node.js Express 框架 Node.js R ...

  9. [Node.js] 08 - Web Server and REST API

    有了 [Node.js] 07 - Html and Http 作为基础,再继续下面的内容. Node.js 路由 Node.js GET/POST请求 Node.js Web 模块 Node.js ...

随机推荐

  1. 大数据学习--day03(运算符、流程控制语句)

    运算符.流程控制语句 自增自减容易出错的地方: 扩展的赋值运算符  a+=b 等同于 a = a+b;  扩展的赋值运算符 隐含了一个类型的强制转换 & && 有何区别   & ...

  2. hadoop生态搭建(3节点)-10.spark配置

    # https://www.scala-lang.org/download/2.12.4.html# ================================================= ...

  3. 带提示范围的猜数小游戏--python

    import random random_number = random.randint(1, 99) print(random_number) start_data = 1 end_data = 9 ...

  4. python3 package management 包管理 实例

    包是一种组织管理代码的方式,包里面存放的是模块 用于将模块包含在一起的文件夹就是包 包内包含__init__.py标志性文件 定义一个学生类,一个sayhello函数,一个打印语句 # p01.py ...

  5. (数据科学学习手札46)Scala中的面向对象

    一.简介 在Scala看来,一切皆是对象,对象是Scala的核心,Scala面向对象涉及到class.object.构造器等,本文就将对class中的重点内容进行介绍: 二.Scala中的类 2.1 ...

  6. 使用GC 初始化DG(将备份集复制到目标端再初始化)

    概述 当前环境中有一个GC节点,一套RAC 11.2.0.4的数据库,一个已经使用GC进行在线初始化好的dg环境,需要模拟在远端使用rman备份集进行初始化DG的操作.   恢复环境 当前环境中 已经 ...

  7. ADB连接不上手机,端口5037被占用的情况解决

    最近在搞手机APP自动化测试,adb连接手机时提示端口被占用 检测5037端口被谁占用,cmd窗口输入命令:netstat -ano | findstr "5037" (注意”50 ...

  8. python基础之变量和简单数据类型

    1.1 变量的命名和使用规范 变量名可以包含数字.字母.下划线,但是不能以数字开头. 变量名不能包含空格,可使用下划线来分割其中的单词. 不要将Python关键字和函数名用作变量名. 变量名应既简短又 ...

  9. leetcode-岛屿的个数

    岛屿的个数 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 ...

  10. 209. First Unique Character in a String

    Description Find the first unique character in a given string. You can assume that there is at least ...