美文网首页
node connect

node connect

作者: Haylee_k | 来源:发表于2018-01-10 13:32 被阅读0次
    
    var connect = require('./connect');
    
    var cnt =
    
        connect()
    
        .use(function (req, res) {
    
            res.end('hello word\n')
    
        })
    
        .listen(3000);
    
    
    1. connect() 执行后:生成app函数及app下挂载的几个方法:

    function app(req, res, next) {

    app.handle(req, res, next);
    

    }

    app.handle = function xxx

    app.use = function(route, fn)

    app.route = ‘/’

    app.stack = []

    1. .use(route, func)

    path 保存路径

    handle 保存处理函数

    对传入的参数进行判断

    if route == ‘/aaaa/’

    则 route.slice(0, -1) 处理成 ‘/aaa’

    结果:

    path: ‘/aaa’

    handle: undefined

    if route != ‘string’

    结果

    path: ‘/’
    
    handle: route
    

    将每个use的配置保存到app.stack中,即成为一种中间件,当请求到达后,根据是否手动调用next顺序执行handle:

    app.stack.push(

    {

    path,
    
    handle
    

    }

    )

    1. listen()

    http.createServer启动server

    
    http.createServer(
    
      function app(req, res, next) {
    
        app.handle(req, res, next);
    
      }
    
    )
    
    

    每个请求都会依次遍历stack中的handle,根据route筛选符合条件的请求,并执行

    当请求进来后:执行app.handle(req, res, next),此时next为undefined

    每个请求的所有内容都在app.handle()这个闭包里。

    index 用于记录当前正在处理第几个handle

    protohost 根据url拿到host

    removed

    slashAdded

    stack 所有的中间件函数

    req.originUrl = req.url 存储url

    执行next()

    next中的逻辑:

    if(skip this layer if the route doesn't match)next()进入下一个stack

    // eg: url: /foo

              route: /  ‘’
    
              匹配成功
    

    if (route match does not border "/", ".", or end) next()进入下一个stack

    // eg: url: /foo/ /foo.xxx /foo

          route: /foo
    
          匹配成功
    

    trim off the part of the url that matches the route

    请求进入 -> 自调用next()执行第1个stack里的handle -> 遇到next()执行第2个handle -> … -> 遇到next()执行第n个handle -> 执行第n个handle的剩余部分 -> … -> 第二个handle的剩余部分 -> 第一个handle的剩余部分

    执行app.handle(),如果use中的函数参数为req, res, next并且无异常,需要手动调用next,否则不会到下一个use中。

    相关文章

      网友评论

          本文标题:node connect

          本文链接:https://www.haomeiwen.com/subject/jclonxtx.html