gpt4 book ai didi

轻松创建nodejs服务器(5):事件处理程序

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章轻松创建nodejs服务器(5):事件处理程序由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

为了对不同请做出不同的反馈,我们引入一个事件处理器的模块.

该模块命名为 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服务器(5):事件处理程序的文章就讲到这里了,如果你想了解更多关于轻松创建nodejs服务器(5):事件处理程序的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com