【发布时间】:2016-09-27 14:26:17
【问题描述】:
我看了connectJS的source code,这部分让我很困惑
function createServer() {
function app(req, res, next){ app.handle(req, res, next); }
merge(app, proto);
merge(app, EventEmitter.prototype);
app.route = '/';
app.stack = [];
return app;
}
module.exports = createServer;
基本上next 是内部堆栈耗尽时的最终处理程序,并且
app 应该直接去 for http.createServer 接受长度为 2 的函数。但是 app 声明接受 3 个参数。那么在哪里传递第三个参数?
看过源码的人都明白,如果没看过源码,强烈推荐阅读,很短。然后,可以回到这个问题
【问题讨论】:
-
酷,酷...您是否还阅读了their documentation 而不是源代码?因为它解释了这种基本行为,因为它是 Sencha 的 connect(以及 Express.js 等衍生项目)中中间件如何工作的基础
-
@Mike'Pomax'Kamermans 当然我做到了,请告诉我一种可以传入
next参数的方法,app在客户端可以做任何事情之前就已经返回了!!!! -
@Guigui:反对票是匿名的。我不是 node.js 方面的专家,但你肯定对那些在自己的时间免费帮助你的人有着非常好战的态度。事实上,你的问题不是很清楚:你到底要什么?
-
如果您认为我回答了错误的问题(当然,我可能是),请更新您的帖子,以便更明确地说明您需要回答的内容。现在您的问题似乎是“我如何传递
next?”,这是基本的 Connect/Express 行为并且有据可查。就您显示的源代码而言,行为似乎很明显:函数app被定义为具有您的参数,并在定义后立即附加到handle上。然后EventEmitter.prototype被拍打得很好。 -
那么请更新您的问题以解释这是您如何理解在您的问题中工作的源代码(不是在 cmets 中,我不是唯一一个在看它的人,当然也不是只有一个你希望有可能回答它的人),以及为什么你认为这是基于其他代码,尽管你预期的跟踪,但这并不是正在发生的事情。这样,您可能会从更多人那里得到更好的答案。我需要走出去,但祝你好运。作为建议:删除炎症性 cmets 是个好主意。他们不帮助获得答案,但确实帮助搁置问题。