我们要为路由提供请求的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(string)["foo"] | | querystring(string)["hello"]
当然我们也可以用querystring模块来解析POST请求体中的参数,稍后会有演示。
现在我们来给onRequest()函数加上一些逻辑,用来找出浏览器请求的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路径为基准映射到处理程序上。
在我们所要构建的应用中,这意味着来自/start和/upload的请求可以使用不同的代码来处理。稍后我们将看到这些内容是如何整合到一起的。
现在我们可以来编写路由了,建立一个名为 router.js 的文件,添加以下内容:
function route(pathname) { console.log("About to route a request for " + pathname); } exports.route = route;
如你所见,这段代码什么也没干,不过对于现在来说这是应该的。在添加更多的逻辑以前,我们先来看看如何把路由和服务器整合起来。
我们的服务器应当知道路由的存在并加以有效利用。我们当然可以通过硬编码的方式将这一依赖项绑定到服务器上,但是其它语言的编程经验告诉我们这会是一件非常痛苦的事,因此我们将使用依赖注入的方式较松散地添加路由模块。
首先,我们来扩展一下服务器的start()函数,以便将路由函数作为参数传递过去,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,使得路由函数可以被注入到服务器中:
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/,输出结果如下:
相关推荐
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让JavaScript得以在服务器端运行,打破了JavaScript只能在浏览器中使用的限制。Node.js采用单线程、事件驱动的非阻塞I/O模型,使其在高并发场景下表现出色,...
《Node.js实战(第2版)》是一本深入探讨Node.js技术的实战指南,适合有一定JavaScript基础并希望进一步掌握Node.js开发的读者。本书详细介绍了如何利用Node.js的强大功能进行后端开发,以及如何与其他技术栈配合,...
- **Express**:Express是Node.js中最流行的Web应用程序框架,简化了路由、中间件和模板引擎的使用。 - **Koa**:Koa是Express的作者创建的下一代Web框架,使用了Promise和async函数,更加轻量级。 8. **数据库...
书中还将涉及Express框架的使用,Express是Node.js中最流行的Web应用框架,它简化了路由设置、中间件使用和模板引擎等常见任务。通过Express,开发者可以快速搭建功能齐全的Web服务。 数据库连接也是Node.js开发中...
Node.js从入门到精通的知识点涵盖了Node.js的基础到高级应用,包括包管理、后端服务器搭建、事件模型、文件系统操作、路径处理、HTTP压缩、模板引擎、数据库集成、用户认证等多个方面。 1. **包管理器**:Node.js有...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者使用 JavaScript 语言在服务器端编写可扩展的网络应用。Node.js 利用了事件驱动、非阻塞I/O模型,使其在处理高并发请求时表现出极高的性能。...
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让JavaScript开发者可以在服务器端执行代码,打破了传统的JavaScript只能在浏览器端运行的限制。这本《Node.js开发实战详解》电子书,显然是为了帮助那些...
1. **Node.js基础**:Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript进行服务器端编程。讲解可能包括了JavaScript在Node.js中的异步非阻塞I/O模型,事件驱动编程的概念,以及如何...
1. Express框架:Express是基于Node.js的最流行的Web应用框架,简化了路由、中间件和模板引擎的使用。 2. MongoDB数据库连接:通过Mongoose库,可以轻松连接和操作MongoDB数据库。 3. WebSocket:实现实时通信的关键...
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript进行服务器端编程。在给定的"server.js"文件中,我们可以推测它是一个简单的Node.js服务器示例,用于演示如何在Node.js环境中处理...
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript,提供了一个高效的开发平台。 首先,我们关注`htutil.js`,这可能是处理HTTP请求和响应的工具模块。在Node.js中,我们...
Node.js是一个开放源码、跨平台的JavaScript运行环境,它允许开发者在服务器端运行JavaScript代码。Express是基于Node.js的一个Web应用框架,极大地简化了构建Web应用的过程。 ### 1. Node.js安装 首先,你需要在你...
Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。这个"Node.js入门经典源代码"压缩包文件显然包含了用于学习和理解Node.js基础知识和实践的源代码示例。以下是...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够使用 JavaScript 来进行服务器端编程。这个技术的出现极大地推动了Web应用的开发效率,特别是对于实时、高并发的网络应用来说,Node.js ...
此外,Node.js 拥有庞大的生态系统,NPM(Node Package Manager)是世界上最大的开源软件包仓库,提供了数以十万计的第三方模块,涵盖了各种功能,如数据库连接、模板引擎、路由管理等,极大地丰富了 Node.js 开发者...
Node.js 路由是Web开发中非常核心的一个概念,特别是在使用Node.js进行后台开发时。路由简单来说就是根据不同的URL访问路径,决定执行哪段程序代码。路由就好比是宾馆前台,负责根据客人的请求安排他们去相应的房间...
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让开发者能够在服务器端使用JavaScript编写代码。结合Express框架,可以快速搭建起RESTful API服务,处理HTTP请求,连接数据库,如MongoDB,来存储和检索...
本文将深入探讨`Node.js`,这是一种基于Chrome V8引擎的JavaScript运行环境,允许开发者使用JavaScript进行服务器端编程。这个“Node.js学习案例”旨在为初学者提供一个实践平台,帮助他们理解和掌握Node.js的核心...
Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript进行服务器端编程,打破了传统的客户端脚本语言限制。在"Node.js开发实战详解"这个资源中,你将深入学习如何利用Node.js的强大功能...