[node] Node.js的路由

[node] Node.js的路由

  • 路由 & 路由解析
  • 路由信息的整合
    • URL信息
    • 路由处理逻辑
    • 路由逻辑与URL信息的整合
    • 路由的使用

路由 & 路由解析

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

因此,根据 HTTP 请求,从中提取出请求的 URL 以及 GET/POST 参数。这一功能应当属于路由还是服务器(亦或一个单独模块的功能)确实值得探讨,但这里暂定其为HTTP服务器的功能。

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

var url = require("url");
var querystring = require("querystring");var data = "http://localhost:8888/start?foo=bar&hello=world";const query = url.parse(data).query;
console.log(query); // foo=bar&hello=world
console.log(url.parse(data).pathname); // /start
console.log(querystring.parse(query)["foo"]); // bar
console.log(querystring.parse(query)["hello"]); // world

路由信息的整合

URL信息

server.js ,用于获取浏览器URL地址,该信息是路由需要使用到的信息:

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 路径为基准)映射到处理程序上。

路由处理逻辑

router.js 简单的路由处理逻辑模块:

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

以上代码没有具体的逻辑处理,你之后可以根据需要添加,此时只是封装了路由的处理方法。

路由逻辑与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.");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 文件,服务器使用路由的方式–路由函数注入到服务器中:

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

以上整体是对路由信息的获取与如何添加路由处理逻辑的一个简单介绍,是一种方法上的介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/237565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 13 - Media框架(25)- OMXNodeInstance(二)

上一节我们了解了 OMXNodeInstance 的创建过程,以及 IOmx 服务和 OMXNodeInstance、OMX组件之间的联系。这一节我们将一起了解 ACodec 是如何通过 OMXNodeInstance 这个中间层进行端口定义设置,以及端口Buffer分配的。 OMXNodeInstance 的代码还是比较长…

Python之Django项目的功能配置

1.创建Django项目 进入项目管理目录,比如:D盘 执行命令:diango-admin startproject demo1 创建项目 如果提示diango命令不存在,搜索diango-admin程序的位置,然后加入到环境变量path中。 进入项目,cd demo…

CentOS 7 Tomcat服务的安装

前提 安装ava https://blog.csdn.net/qq_36940806/article/details/134945175?spm1001.2014.3001.5501 1. 下载 wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gzps: 可选择自己需要的版本下载安装https://mirr…

【单调栈】LeetCode2334:元素值大于变化阈值的子数组

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 涉及知识点 单调栈 题目 给你一个整数数组 nums 和一个整数 threshold 。 找到长度为 k 的 nums 子数组,满足数组中 每个 元素都 大于 threshold / k 。 请你返回满足要求的 任意 子数组的 大小 。如果没有这…

记录Ubuntu20.04安装mujoco与安装mujoco_py并测试时提示Cython.Compiler.Errors.CompileError的解决方案

安装mujoco可以参考如下来链接: Ubuntu20.04安装mujoco: https://blog.csdn.net/qq_47997583/article/details/125400418 安装mujoco_py并测试时提示Cython.Compiler.Errors.CompileError: https://blog.csdn.net/m0_38122847/article/de…

Git 合并两个项目

前言 在 Git 中合并两个项目的代码需要一些步骤&#xff0c;尤其是如果这两个项目有不同的版本历史或者是独立的 Git 仓库。以下是一般的步骤&#xff1a; 克隆第一个项目&#xff1a; 在你的本地机器上克隆第一个项目的 Git 仓库。 git clone <URL_of_first_project>…

STM32CubeMX驱动ST7789

环境 1、单片机:STM32F103C8T6 2、开发平台&#xff1a;STM32CUBEMXkeil mdk 3、屏幕&#xff1a;ST7789&#xff0c;分辨率240*240 STM32配置 1、使用硬件SPI1驱动屏幕。配置如下&#xff1a; 2、屏幕控制引脚配置&#xff1a; 注意&#xff1a;只配置了DC,RST,CS这3个控…

使用 Taro 开发鸿蒙原生应用 —— 探秘适配鸿蒙 ArkTS 的工作原理

背景 在上一篇文章中&#xff0c;我们已经了解到华为即将发布的鸿蒙操作系统纯血版本——鸿蒙 Next&#xff0c;以及各个互联网厂商开展鸿蒙应用开发的消息。其中&#xff0c;Taro作为一个重要的前端开发框架&#xff0c;也积极适配鸿蒙的新一代语言框架 —— ArkTS。 本文将…

Hive执行计划

Hive提供了explain命令来展示一个查询的执行计划&#xff0c;这个执行计划对于我们了解底层原理&#xff0c;Hive 调优&#xff0c;排查数据倾斜等很有帮助。 使用语法如下&#xff1a; explain query;在 hive cli 中输入以下命令(hive 2.3.7)&#xff1a; explain select s…

【Java之数据结构与算法】

选择排序 package Code01;public class Code01_SelectionSort {public static void selectionSort(int[] arr) {if(arrnull||arr.length<2) {return;}for(int i0;i<arr.length;i) {int minIndex i;for(int ji1;j<arr.length;j) {minIndex arr[minIndex] > arr[j…

前后端实现解析用户请求ip地址

前言 在我的软件系统中,如果希望安全系数高一些的话,往往会有用户登陆行为表来记录用户登陆行为,保障用户账号安全,比如记录登陆地址,每次登陆时候读取数据最近几次登陆地点,进行账号安全验证 假如以下是我的用户登陆行为表 实现获取用户登陆地址的方法有很多种,比如通过前端整…

使用pytest+selenium+allure实现web页面自动化测试

测试文件 base 基本方法data 测试数据page web页面相关操作image 测试截图log 日志文件report 测试报告文件temp 临时文件tool 文件读取&#xff0c;发邮件文件TestCases 测试用例 在page下的__init__.py文件下配置 import os import time from selenium.webdriver.common.by…

python算法例22 下一个更大的数

1. 问题描述 给定一个环形数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;为每个元素打印下一个更大的元素。数字x的下一个更大的数&#xff0c;是遍历数组的过程中出现的第一个更大的数字&#xff0c;这意味着可以循环搜索以查找其下一…

伪协议和反序列化 [ZJCTF 2019]NiZhuanSiWei

打开题目 代码审计 第一层绕过 if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){ echo "<br><h1>".file_get_contents($text,r)."</h1></br>"; 要求我们get传参的text内容必须为w…

服务器的维护是如何操作的

服务器的维护是如何操作的 服务器可以说是不可或缺的资源&#xff0c;因为现在网络技术发达&#xff0c;我们的生活也都离不开网络的存在&#xff0c;我们想要获取的业务、资料等大多是通过网络进行&#xff0c;所以想要顺应潮流并获得发展&#xff0c;肯定需要服务器来将企业…

案例109:基于微信小程序的高校寻物平台

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【PostgreSQL】从零开始:(二十一)数据类型-布尔类型

布尔&#xff08;boolean&#xff09;类型 概述 布尔类型是一种数据类型&#xff0c;表示真&#xff08;true&#xff09;或假&#xff08;false&#xff09;的值。在计算机中&#xff0c;布尔类型主要用于判断条件的真假。布尔类型通常用于控制流程、条件判断和逻辑运算等方…

【WebRTC---源码篇】(二十五)音视频同步

RTC音视频同步场景: 音视频不在同一个时间点开始采集,如在视频先采集,音频后采集的情况下。我们不能贸然的认为音频起点来对齐视频起点,这种情况下,如何对音视频进行处理,就涉及到了音视频同步的知识。 解决思路: 通过现有条件,我们拥有RTP和SR,那么是不是可以用这两…

爬虫工作量由小到大的思维转变---<第二十章 Scrapy几个常规参数的调整策略心得>

前言: CONCURRENT_REQUESTS 32 # 设置请求并发数 DOWNLOAD_TIMEOUT 5 # 设置超时时间为5秒 RETRY_TIMES 2 # 设置你想要的重试次数 DOWNLOAD_DELAY 0.1 # 控制两个连续请求之间的延迟时间&#xff0c;设置为0.1表示每次请求之间的等待时间为0.1秒 CONCURRENT_REQUESTS_…

[XR806开发板试用] XR806——基于FreeRTOS下部署竞技机器人先进模糊控制器

前言 很荣幸参与到由“极术社区和全志在线联合组织”举办的XR806开发板试用活动。本人热衷于各种的开发板的开发&#xff0c;同时更愿意将其实现到具体项目中。秉承以上原则&#xff0c;发现大家的重心都放在开发中的环境构建过程&#xff0c;缺少了不少实际应用场景的运用&am…