首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Node中路由请求和构造响应处理程序

在Node中路由请求和构造响应处理程序
EN

Stack Overflow用户
提问于 2011-11-15 22:00:30
回答 1查看 1.5K关注 0票数 2

因此,我是一个系统程序员,目前正在自学自己的web应用程序编程。就像学习新东西时一样,我还没有牢牢掌握惯用的实现,或者简单地说,如何用“正确”的方式去做一些事情。

在花了一些时间构建一些游戏和一些简单的UI(只使用HTML和javascript )之后,我现在冒险进入一个非平凡的动态应用程序。我使用Node作为我的服务器,并有一个关于如何路由响应处理程序的问题。

我在跟踪一个(似乎) 不错的导游在这里找到。到目前为止,这是我找到的唯一指导您如何构建实际应用程序的指南(与response.write("Hello world"); response.end();不同)。

作者建议添加这样的响应处理程序:

代码语言:javascript
运行
复制
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);

代码应该是不言自明的,但实际上,他使用一个对象作为关联容器,将查询字符串中请求的资源映射到处理程序。这一切都很好,但是我想避免每次添加新的处理程序时都向这个文件添加一行。

我的想法是:为每个处理程序创建一个模块,并使用一些公共接口来处理响应。类似于:

代码语言:javascript
运行
复制
function handleReq(...) {
    ...
}

exports.handleRequest = handleReq;

然后我可以动态地require模块,即,

代码语言:javascript
运行
复制
// in my router module
function route(pathName, args) {
    // where 'pathName' is something obtained
    // in a manner like so in the request handler:
    // url.parse(request.url).pathname;  

    var handler = require(pathName);
    handler.handleRequest(args);
}

在这种方法中,我有没有发现什么缺陷?它似乎会减少冗余代码,但作为这个领域/技术的初学者,我对此表示怀疑。也许作者只是想保持简单,或者就像我猜想的那样,我遗漏了一些东西。

提前干杯和感谢。如果你觉得有理由这样做的话,也不要随意地向我提出其他看似无关的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-15 22:52:05

做这样的事情有很多种方法,我想导游只是想简单些。

我倾向于这样做:创建在其中包含处理程序的模块,而要添加一个新的处理程序,只需将其添加到正确的位置,work...no就会自动修改任何其他代码。服务器代码只需尝试调用moduleName.handleRequest(scriptName、req、resp);如果它返回true,则成功。(它可以在所有有处理程序的模块上尝试,如果没有返回true,它可以显示404)

假定scriptName已经对其进行了路径修整(因此"/start“只是”开始“,等等),如果您真的需要使用路径来确定将它分派给哪个处理程序,我相信您可以以一种优雅的方式构建它,但我没有费心。

在模块本身中,您可以拥有这样的内容:

代码语言:javascript
运行
复制
var handlers = {
 start : function (req, resp) {
  // ...
  },

 upload : function (req, resp) {
  // ...
  } 
};

export.handleRequest(name, req, resp) {
  if (handlers[name] !== undefined) {
    handlers[name](req,resp);
    return true;
  }
  // do special cases (if there are any)
  if (name === '') {
    handlers.start(req,resp);
    return true;
  }
  return false; // not found
}

从你所举的例子来看,这实际上只是在复杂性/复杂性方面提高了一步。你可以一直往前走,直到你有了一个完整的框架。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8143762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档