nodejs的connect-radis模块怎么用

 我来答
育知同创教育
2017-12-06 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

export createServer函数。

下图只提取部分(我觉得比较有代表性比较关键)功能的代码。

2. 所以执行connect() 也就是执行createServer(),具体做了如下事情:

1)返回一个函数app,入口参数为req, res。app有很多属性方法,比如app.use, app.handle, app.listen,也支持事件。app的函数体就是执行app.handle(req, res, next)。

2)为app添加了stack属性,用来保存中间件。初始值为空数组。

3. 当执行app.use(require('body-parser').json())的时候执行了什么

1) 首先require('body-parser').json()返回一个函数parser,入口参数为req, res, next。函数执行到最后会调用next();

2) app.use是将{route: '/', handle: parser}加入stack.

同样的道理,app.use的过程是将中间件加入app.stack的过程。server启动前stack中已经有一系列中间件。

4. app.listen(3000)

创建server实例:http.createServer(app)。所以app是收到HTTP请求后的回调。

5. 当一个HTTP请求到来后,由于回调函数是app, 所以执行app.handle(req, res, next)。此时next是undefined。handle做了以下几件事

1)req.originalUrl = req.originalUrl || req.url。保存初始url

2)var done = next || finalHandler(req, res, {env: env, onerror: logerror})

3)定义next函数并执行。next函数做了以下几件事:

a. 获取下一个中间件。index初始为0

b. 如果layer为undefined, 在下一个事件循环执行done.

c. 取出layer中route, 如果跟当前url不匹配,执行next(), 也就是执行下一个中间件。如果匹配,执行call(layer.handle, route, err, req, res, next)

6. call函数做的事情是:

1)执行handle。如果没有错误,直接返回。handle函数中可能还会调用next, 比如bodyParser.json。如果有错误抛出,设置error。

2)如果出现了错误,执行next(error);

7. 中间件队列遍历结束,执行finalHandler。如果某个中间件直接执行res.send之类的操作,不再执行next, 请求处理结束。

所以请求从发送到返回的过程就是req被若干个中间件函数处理,每个函数对req有一点修改,然后传递给下一个中间件函数。next函数是一个闭包,并且一直作为参数被传递,index共享。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式