为了对不同请做出不同的反馈,我们引入一个事件处理器的模块。
该模块命名为 requestHandlers,我们先添加start() 和 upload()两个占位函数。
requestHandlers.js 代码如下:
function start() { console.log("访问/star时调用这个。"); } function upload() { console.log("访问/upload时调用这个。"); } exports.start = start; exports.upload = upload;
在真实的应用中,请求处理程序的数量会不断增加,我们当然不想每次有一个新的URL或请求处理程序时,都要为了在路由里完成请求
到处理程序的映射而反复折腾。
除此之外,我们也不想在在路由里有一大堆if request == x then call handler y,这样会让代码看起来 很杂乱、很不专业的感觉。
这里我将使用关联数组的概念来处理这个需求,我们将一系列请求处理程序通过一个对象来传递,并且需要使用松耦合的方式将这个对象注入到route()函数中。
我们先将这个对象引入到主文件index.js中:
var server = require("./server"); var router = require("./router"); var requestHandlers = require("./requestHandlers"); var handle = {}; handle["/"] = requestHandlers.start; handle["/start"] = requestHandlers.start; handle["/upload"] = requestHandlers.upload; server.start(router.route, handle);
比如我想加一个/show的映射,直接添加一句 handle["/show"] requestHandlers.show;就可以了;
哈哈,这样一来代码是不是简洁有秩序多了?!
接下来我们将handle对象传给服务器,server.js修改如下:
var http = require("http"); var url = require("url"); function start(route, handle) { function onRequest(request, response) { var pathname = url.parse(request.url).pathname; console.log("Request for " + pathname + " received."); route(handle, 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;
对应地修改route.js文件中修改route()函数:
function route(handle, pathname) { console.log("About to route a request for " + pathname); if (typeof handle[pathname] === 'function') { handle[pathname](); } else { console.log("No request handler found for " + pathname); } } exports.route = route;
我们将handle对象作为参数传给服务器,再由路由接收,最后由路由来判断当前路径对应的请求处理程序存在否,存在的话就调用对应的函数。
我们可以用从关联数组中获取元素一样的方式从传递的对象中获取请求处理函数,因此就有了简洁流畅的形如handle[pathname]();的表达式,这个感觉就像在前方中提到的那样:“嗨,请帮我处理了这个路径”。
这样一来,我们就可以根据不同请求作出不同的处理了。
下一节我们将进一步改造代码,让服务器作出一些实际的反馈操作。
本文向大家介绍轻松创建nodejs服务器(10):处理POST请求,包括了轻松创建nodejs服务器(10):处理POST请求的使用技巧和注意事项,需要的朋友参考一下 目前为止,我们做的服务器没有实际的用处,接下来我们开始实现一些实际有用的功能。 我们要做的是:用户选择一个文件,上传该文件,然后在浏览器中看到上传的文件。 首先我们需要一个文本区(textarea)供用户输入内容,然后通过POST请
本文向大家介绍轻松创建nodejs服务器(10):处理上传图片,包括了轻松创建nodejs服务器(10):处理上传图片的使用技巧和注意事项,需要的朋友参考一下 本节我们将实现,用户上传图片,并将该图片在浏览器中显示出来。 这里我们要用到的外部模块是Felix Geisendörfer开发的node-formidable模块。它对解析上传的文件数据做了很好的抽象。 要安装这个外部模块,需在cmd下执
本文向大家介绍轻松创建nodejs服务器(4):路由,包括了轻松创建nodejs服务器(4):路由的使用技巧和注意事项,需要的朋友参考一下 服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤。 第一步我们需要先解析出请求URL的路径,我们引入url模块。 我们来给onRequest()函数加上一些逻辑,用来找出浏览器请求的URL路径: 好了,pathname就是请求
本文向大家介绍轻松创建nodejs服务器(2):nodejs服务器的构成分析,包括了轻松创建nodejs服务器(2):nodejs服务器的构成分析的使用技巧和注意事项,需要的朋友参考一下 紧接上一节,我们来分析一下代码: 第一行请求(require)Node.js自带的 http 模块,并且把它赋值给 http 变量。 接下来我们调用http模块提供的函数: createServer 。 这个函数
本文向大家介绍轻松创建nodejs服务器(6):作出响应,包括了轻松创建nodejs服务器(6):作出响应的使用技巧和注意事项,需要的朋友参考一下 我们接着改造服务器,让请求处理程序能够返回一些有意义的信息。 我们来看看如何实现它: 1、让请求处理程序通过onRequest函数直接返回(return())他们要展示给用户的信息。 2、让我们从让请求处理程序返回需要在浏览器中显示的信息开始。 我们需
本文向大家介绍轻松创建nodejs服务器(1):一个简单nodejs服务器例子,包括了轻松创建nodejs服务器(1):一个简单nodejs服务器例子的使用技巧和注意事项,需要的朋友参考一下 我们先来实现一个简单的例子,hello world。 似乎每种语言教程的第一节都会讲这个,我们也不例外。 首先我们先创建一个项目目录,目录可自己定义,本案例的目录为 e:/nodetest/。 由于我们要搭建