/*
要为程序提供请求的 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. Flink基本概念

    Flink基本概念 1.The history of Flink? 2.What is Flink? Apache Flink是一个开源的分布式.高性能.高可用.准确的流处理框架,主要由Java代码实 ...

  2. categorical[np.arange(n), y] = 1 IndexError: index 2 is out of bounds for axis 1 with size 2

    我的错误的代码是:train_labels = np_utils.to_categorical(train_labels,num_classes = 3) 错误的原因: IndexError: ind ...

  3. 北京Uber优步司机奖励政策(12月30日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. 成都Uber优步司机奖励政策(2月23日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. JavaScript---复选框反选全选

    Script <script type="text/javascript"> /*直接使用document.getElementsByName("c1&quo ...

  6. 【Keras案例学习】 CNN做手写字符分类(mnist_cnn )

    from __future__ import print_function import numpy as np np.random.seed(1337) from keras.datasets im ...

  7. SpringBoot-02:SpringBoot中的POM文件详细解释

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 我把pom文件,以及它的详细解释发出来 <?xml version="1.0" en ...

  8. git 操作几个命令

     git clone ssh://lijianfeng@192.168.1.246:29418/GMGameSDK压栈:git stash查状态:git status切换到要修改的提交:git reb ...

  9. XSS----payload,绕过,xss小游戏记录

    一.XSS 1.原理:攻击者把恶意的脚本代码注入到网页中,等待其他用户浏览 这些网页(或触发其他条件),从而执行其中的恶意代码. 1.xss实例代码: test.html <!DOCTYPE h ...

  10. Selenium(Python)生成Html测试报告

    由于Python3已经不支持HTMLTestRunner了, 无论是PyCharm还是pip都无法安装成功, 所以只能去 http://tungwaiyip.info/software/HTMLTes ...