Node js路由
/*
要为程序提供请求的 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路由的更多相关文章
- Node.js 路由
我们要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码. 因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数.这一功能应当属 ...
- node.js 路由详解
路由的基本使用 第一步:获取url跟目录下的字符 var http = require('http'); var url = require('url') http.createServer(func ...
- node.js - 路由、中间件、mysql
这几天天天搞到这么晚,我看今天的内容看起不多啊,不知道为什么学着学着就到了这么晚.今天的内容还是有点多哈,有点自我矛盾了,再次一一道来. 1. 首先今天先看到路由的概念,什么叫做路由? 路由就是映射关 ...
- 12、Node.js 路由
这里实现的好像就是把路由和服务器相结合起来.具体需要引入 url 模块和 http 模块为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码需要 ...
- Node.js Web 开发框架大全《路由篇》
这篇文章与大家分享优秀的 Node.js 路由(Routers)模块.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...
- Node.js:路由
ylbtech-Node.js:路由 1.返回顶部 1. Node.js 路由 我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码. 因 ...
- Node.js学习 - Route
Node.js 路由 URL解析,需要url和querystring两个模块url.parse(string).query | url.parse(string).pathname | | | | | ...
- [Node.js] 07 - Html and Http
前言 一.原本的计划 Node.js 路由 Node.js GET/POST请求 到此,有必要复习下http章节 Node.js Web 模块 Node.js Express 框架 Node.js R ...
- [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 ...
随机推荐
- s3c2440串口详解
一.UART原理说明 通用异步收发器简称UART(Universal Asynchronous Receiver/Transmitter),它用来传输串行数据:发送数据时,CPU将并行数据写入UART ...
- python七类之整型布尔值
整型与布尔值 一.关键字:整型 --->int 布尔值----->bool : True 真 False 假 1.整形和布尔值都是不可变得不可迭代的数据类型 2.整型: 主 ...
- PHP array_reduce()函数的应用解析
实例 向用户自定义函数发送数组中的值,并返回一个字符串: <?php function myfunction($v1,$v2) { return $v1 . "-" . $v ...
- 小Hi和小Ho的礼物
题目:小Hi和小Ho的礼物 注:[i.j.p.q]为下标 个人感觉这道题是有一定难度的.读者可以参考一下[四平方和]的解题思路 分析过程下次补上 代码如下: #include <iostream ...
- Lucene第二讲——索引与搜索
一.Feild域 1.Field域的属性 是否分词:Tokenized 是:对该field存储的内容进行分词,分词的目的,就是为了索引. 否:不需要对field存储的内容进行分词,不分词,不代表不索引 ...
- 在线接口文档工具——ShowDoc
ShowDoc:https://www.showdoc.cc/ --待更.
- docker (2) 通用/镜像命令
原文:docker (2) 通用/镜像命令 Docker 的常用命令: (1)Docker help 命令: 可以查看有关docker的所有操作命令: (2)docker COMMAND -–hel ...
- 优步UBER司机全国各地奖励政策汇总 (2月1日-2月7日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- mysql 开启远程连接
如图,修改mysql数据库中user表中的User字段为root的host为%,然后重新启动mysql服务即可让远程桌面连接本地.
- 【cover-view、cover-image】 覆盖组件说明
cover-view.cover-image 这两类覆盖组件用于显示在一些特殊组件上方(map.video.canvas.camera.live-player.live-pusher). 这类组件一般 ...