ylbtech-Node.js:路由
1.返回顶部
1、

Node.js 路由

我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数随后路由需要根据这些数据来执行相应的代码

因此,我们需要查看 HTTP 请求,从中提取出请求的 URL 以及 GET/POST 参数。这一功能应当属于路由还是服务器(甚至作为一个模块自身的功能)确实值得探讨,但这里暂定其为我们的HTTP服务器的功能。

我们需要的所有数据都会包含在 request 对象中,该对象作为 onRequest() 回调函数的第一个参数传递。但是为了解析这些数据,我们需要额外的 Node.JS 模块,它们分别是 url 和 querystring 模块

                   url.parse(string).query | url.parse(string).pathname | | | | | ------ ------------------- http://localhost:8888/start?foo=bar&hello=world --- ----- | | | | querystring.parse(queryString)["foo"] | | querystring.parse(queryString)["hello"]

当然我们也可以用 querystring 模块来解析 POST 请求体中的参数,稍后会有演示。

现在我们来给 onRequest() 函数加上一些逻辑,用来找出浏览器请求的 URL 路径:

server.js 文件代码:

var http = require("http");
var url = require("url");function start() {function onRequest(request, response) {var pathname = url.parse(request.url).pathname;console.log("Request for " + pathname + " received.");response.writeHead(200, {"Content-Type": "text/plain"});response.write("Hello World");response.end();}http.createServer(onRequest).listen(8888);console.log("Server has started.");
}exports.start = start;

好了,我们的应用现在可以通过请求的 URL 路径来区别不同请求了--这使我们得以使用路由(还未完成)来将请求以 URL 路径为基准映射到处理程序上。

在我们所要构建的应用中,这意味着来自 /start 和 /upload 的请求可以使用不同的代码来处理。稍后我们将看到这些内容是如何整合到一起的。

现在我们可以来编写路由了,建立一个名为 router.js 的文件,添加以下内容:

router.js 文件代码:

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

如你所见,这段代码什么也没干,不过对于现在来说这是应该的。在添加更多的逻辑以前,我们先来看看如何把路由和服务器整合起来。

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

首先,我们来扩展一下服务器的 start() 函数,以便将路由函数作为参数传递过去,server.js 文件代码如下

server.js 文件代码:

var http = require("http");
var url = require("url");function start(route) {function onRequest(request, response) {var pathname = url.parse(request.url).pathname;console.log("Request for " + pathname + " received.");route(pathname);response.writeHead(200, {"Content-Type": "text/plain"});response.write("Hello World");response.end();}http.createServer(onRequest).listen(8888);console.log("Server has started.");
}exports.start = start;

同时,我们会相应扩展 index.js,使得路由函数可以被注入到服务器中:

index.js 文件代码:

var server = require("./server");
var router = require("./router");server.start(router.route);

在这里,我们传递的函数依旧什么也没做。

如果现在启动应用(node index.js,始终记得这个命令行),随后请求一个URL,你将会看到应用输出相应的信息,这表明我们的HTTP服务器已经在使用路由模块了,并会将请求的路径传递给路由:

$ node index.js
Server has started.

以上输出已经去掉了比较烦人的 /favicon.ico 请求相关的部分。

浏览器访问 http://127.0.0.1:8888/,输出结果如下:

2、
2.返回顶部
3.返回顶部
4.返回顶部
5.返回顶部
1、
http://www.runoob.com/nodejs/nodejs-router.html
2、
6.返回顶部
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/storebook/p/8707196.html

Node.js:路由相关推荐

  1. Node.js 路由的简单使用

    创建router.js 文件代码: function route(pathname) {console.log("About to route a request for " + ...

  2. node.js路由控制

    一.工作原理 当通过浏览器访问app.js建立的服务器时,会看到一个简单的页面,实际上它已经完成了许多透明的工作, 当访问http://localhost:3000,浏览器会向服务器发送请求,包括请求 ...

  3. Node.js 入门知识点总结

    Noed.js 快速入门 前言 node.js 入门 环境配置 hello node.js node.js 获取参数 node.js 模块系统 node.js 路由 node.js 文件操作 使用 n ...

  4. 学习node js 之微信公众帐号接口开发 准备工作

    绪:因工作须要,近期開始学习Node js,之前隐隐约约听到过node js 但没有实际见到过,仅仅好google了:至于什么是node js,能做些什么,有多么好.或者有哪些弊端我这里就不多说了,由 ...

  5. 【Node.js】 基础语法

    目录 Node.js npm package.json 字符编码 REPL Buffer(缓冲区) 函数 回调函数 模块系统 Express 框架 全局对象 console process Strea ...

  6. node.js 笔记

    目录 项目需求分析 node.js 是怎么跑起来的?它的底层实现是如何的? 安装 node.js,配置 node.js 环境 Node.js 应用是由哪几部分组成的: 创建 Node.js 第一个 & ...

  7. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 路由koa-router

    路由koa-router--MVC 中重要的环节:Url 处理器 ?? iKcamp 制作团队 原创作者:大哼.阿干.三三.小虎.胖子.小哈.DDU.可木.晃晃 文案校对:李益.大力萌.Au.DDU. ...

  8. node.js express php,nodejs开发——express路由与中间件

    路由 通常HTTP URL的格式是这样的: http表示协议. host表示主机. port为端口,可选字段,不提供时默认为80. path指定请求资源的URI(Uniform Resource Id ...

  9. node.js 学习笔记三:路由url

    一.修改server.js var http = require("http"); var url = require("url"); //导入内置url模块f ...

最新文章

  1. php 魔术方法 多继承,day23:单继承多继承菱形继承__init__魔术方法
  2. vba 跳出for循环_VBA简单入门08:For循环
  3. MDT跨网段UEFI部署系统
  4. c语言布尔 printf,fmt.Printf中的格式化动作('verb')
  5. BZOJ1565:[NOI2009]植物大战僵尸——题解
  6. 优化案例(part8)--Robust Recovery of Subspace Structures by Low-Rank Representation
  7. 五、深入理解Mybatis中的参数parameterType (传递一个简单参数,传递多个参数:@Param、使用自定义对象、按位置、使用Map)
  8. 037_自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)
  9. Linux查看已经开放的端口,开放端口遇到防火墙的问题。
  10. big5码在线转换_【开源】基于 SpringBoot 的 web kettle 在线采集平台
  11. 微型计算机的使用寿命,微型计算机使用注意事项及保养的一般方法
  12. 前端拦截url参数xss攻击_闲庭信步聊前端 - 漫谈XSS
  13. OOAD理论知识小结
  14. Android端恶意锁屏勒索应用分析
  15. Windows10开机之后进BIOS
  16. 学习金蝶ERP 之 K3 介绍
  17. NASA准备在2021年推出最大望远镜!哈佛用棉花糖机造“肉”?
  18. Centos7下安装配置开源存储虚拟化QuadStor(4)----Vdisk Clone
  19. Solidworks 2022 Inspection新增功能:光学字符识别、可自定义的检查报告
  20. 一、2440裸机点亮led

热门文章

  1. JavaScript深拷贝Json
  2. 齐鲁工业大学计算机读研,齐鲁工业大学考研难吗
  3. usaco The Perfect Stall(二分匹配模板)
  4. 梯度算法求步长的公式_LM(Levenberg-Marquarelt)算法
  5. java课程设计 mysql_Java课程设计---安装解压版mysyql
  6. php表单的输出,php – Joomla输入表单字段输出
  7. redis mysql 集群_mysql_redis
  8. 下拉列表怎么判断html,判断下拉列表中的值,实现页面跳转,请问这个怎么判断?...
  9. python-pcl GPU、输入输出模块教程翻译
  10. OpenCV后投影,利用阈值函数分割指定区域生成掩膜,通过直方图分布查找其他图像相同区域。