← Node.js 函数 Node.js 全局对象 →

Node.js 开发 URL 路由

Node.js 路由(router) 提供了 URL 请求路径到 Node.js 方法的一一映射机制

我们可以解析 HTTP 请求的 URL ,从 URL 中提取出请求的路径以及 GET/POST 参数

Node.js Web 应用程序所有的请求数据都被封装在 request 对象中,该对象作为 onRequest() 回调函数的第一个参数传递

我们可以使用 Node.js url 模块和 querystring 第三方模块来解析这些请求参数 :

  1. Node.js url 模块可以解析 URL 参数信息
  2. querystring 可以解析 POST 请求中放在 body(请求体中的参数)

URL 解析

解析 URL Query 参数图示

url.parse(string).query
                                           |
           url.parse(string).pathname      |
                       |                   |
                       |                   |
                     ------ -------------------
http://localhost:8080/ss?name=twle&hello=world
                              ----       -----
                                |          |
                                |          |
querystring.parse(queryString)["name"]     |
                                           |
          querystring.parse(queryString)["hello"]

范例

我们可以给 http.createServer 的 onRequest 回调添加一些逻辑,用来找出浏览器请求 URL 的 PATH 路径

main.js

/*
 * filename: main.js
 * author: 简单教程(www.twle.cn)
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
*/

var http = require("http");
var url = require("url");

function serv() {
  function onRequest(req, res)
  {
    var pathname = url.parse(req.url).pathname;
    res.write("<h1>Hello World</h1>");
    res.write("<p>请求的路径是:" + pathname + "</p>")
    res.end();
  }

  http.createServer(onRequest).listen(8080);
  console.log("Server has started.");
}

//exports.serv = serv;
serv();

运行以上 Node.js 范例,输出结果如下

$ node main.js
Server has started.

在浏览器上打开 http://localhost:8080/ss?name=twle&hello=world 显示如下

现在我们的应用可以根据 URL 路径来区别不同请求了

这使我们可以使用路由(还未完成)来将请求以 URL 路径为基准映射到处理程序上

也就是说在我们所要构建的应用中,这意味着来自 /start 和 /upload 的请求可以使用不同的代码来处理

自制路由器

有了上面的基础,我们就可以自己开发一个简单的路由器了

新建一个文件 router.js 添加以下内容

router.js

function route(pathname) {
  console.log("About to route a request for " + pathname);
}

exports.route = route;

这段代码现在什么也没做,这是因为我们还没添加更多的逻辑

我们先来看看如何把路由和服务器整合起来

我们的服务器应当知道路由的存在并加以有效利用,我们当然可以通过硬编码的方式将这一依赖项绑定到服务器上,但是其它语言的编程经验告诉我们这会是一件非常痛苦的事,因此我们将使用依赖注入的方式较松散地添加路由模块

我们先扩展下服务器的 serv() 函数,以便将路由函数作为参数传递过去

加载路由模块

var router = require("./router");

修改 serv() 函数

main.js

/*
 * filename: main.js
 * author: 简单教程(www.twle.cn)
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
*/

var http = require("http");
var url = require("url");
var router = require("./router");

function serv( route ) {
  function onRequest(req, res)
  {
    var pathname = url.parse(req.url).pathname;

    route(pathname);

    res.write("<h1>Hello World</h1>");
    res.write("<p>请求的路径是:" + pathname + "</p>")
    res.end();
  }

  http.createServer(onRequest).listen(8080);
  console.log("Server has started.");
}

//exports.serv = serv;
serv();

当然了,看起来我们仍旧什么都没做

运行以上 Node.js 脚本,输出结果如下

$ node main.js
Server has started.

然后用浏览器打开 http://localhost:8080/ss?name=twle&hello=world 显示如下

说明我们开发的路由器已经起作用了

← Node.js 函数 Node.js 全局对象 →

Node.js 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.

深圳SEO优化公司永新SEO按天收费公司黑河网站seo优化价格清远网站建设设计公司忻州seo网站优化多少钱四平网站优化推广哪家好松原外贸网站设计公司天水网站搭建价格酒泉百度竞价包年推广公司昭通网站优化排名公司邵阳阿里店铺运营大浪百度竞价包年推广报价邵阳网站排名优化多少钱海东百度网站优化排名价格玉溪关键词按天扣费价格贵阳百度关键词包年推广推荐银川网站seo优化公司六安网页制作报价钦州网站搜索优化承德网站改版泰安网络广告推广报价大浪营销网站哪家好茂名外贸网站建设多少钱湖州企业网站改版报价长春英文网站建设推荐海口SEO按天计费报价岳阳品牌网站设计报价南山seo网站优化报价上海模板网站建设价格新余建站公司沧州企业网站建设推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化