gpt4 book ai didi

javascript - 在 Node 中路由请求和构建响应处理程序

转载 作者:搜寻专家 更新时间:2023-11-01 00:34:19 25 4
gpt4 key购买 nike

所以我是一名系统程序员,目前正在自学网络应用程序编程。与学习新事物时的情况一样,我还没有牢牢掌握惯用的实现方式,或者简单地说,如何以“正确”的方式做某事。

在花了一些时间只使用 HTML 和 javascript 构建了一些游戏和简单的 UI 之后,我现在开始尝试开发一个非常重要的动态应用程序。我正在使用 Node 作为我的服务器,并且有一个关于如何路由响应处理程序的问题。

我正在关注一个(貌似)nice guide found here .这是迄今为止我找到的唯一一份指导您如何构建实际应用程序的指南(与 response.write("Hello world"); response.end( );).

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

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);

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

我的想法是这样的;为每个处理程序创建一个模块并使用一些通用接口(interface)来处理响应。像这样的东西:

function handleReq(...) {
...
}

exports.handleRequest = handleReq;

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

// 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);
}

这种方法是否存在我没​​有发现的缺陷?似乎它会减少冗余代码,但作为这个领域/技术的初学者,我很怀疑。也许作者只是想保持简单,或者我猜可能是这样,我遗漏了一些东西。

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

最佳答案

有很多方法可以做这些事情,我认为该指南试图简单一些。

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

scriptName 假定已将路径 trim 掉(因此“/start”将只是“start”等),如果您真的需要使用路径来确定将其分派(dispatch)到哪个处理程序,我是当然你可以以一种优雅的方式构建它,但我没有打扰。

在模块本身中,你可以有这样的东西:

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
}

这实际上只是您引用的示例在复杂性/复杂性方面的一个进步。您可以继续前进,直到拥有一个成熟的框架。

关于javascript - 在 Node 中路由请求和构建响应处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8143762/

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