zoukankan      html  css  js  c++  java
  • app.listen(3000)的源码 和callback

    
    
      const http = require('http');
     listen(...args) {
        debug('listen');
        const server = http.createServer(this.callback());
        return server.listen(...args);
      }
    const compose = require('koa-compose');
     /**
       * Return a request handler callback
       * for node's native http server.
       *
       * @return {Function}
       * @api public
       */
    
      callback() {
        const fn = compose(this.middleware);  //合并中间件
    
        if (!this.listenerCount('error')) this.on('error', this.onerror);  //有error消息, 比如app.on('error',(err)=>console.log('err',err))
    
        const handleRequest = (req, res) => {
          const ctx = this.createContext(req, res);
          return this.handleRequest(ctx, fn);
        };
    
        return handleRequest;
      }
      /**
       * Initialize a new context.
       *
       * @api private
       */
    
      createContext(req, res) {
        const context = Object.create(this.context);
        const request = context.request = Object.create(this.request);
        const response = context.response = Object.create(this.response);
        context.app = request.app = response.app = this;
        context.req = request.req = response.req = req;
        context.res = request.res = response.res = res;
        request.ctx = response.ctx = context;
        request.response = response;
        response.request = request;
        context.originalUrl = request.originalUrl = req.url;
        context.state = {};
        return context;
      }
     /**
       * Handle request in callback.
       *
       * @api private
       */
    
      handleRequest(ctx, fnMiddleware) {
        const res = ctx.res;
        res.statusCode = 404;
        const onerror = err => ctx.onerror(err);
        const handleResponse = () => respond(ctx);
        onFinished(res, onerror);
        return fnMiddleware(ctx).then(handleResponse).catch(onerror);
      }
     /**
       * Return a request handler callback
       * for node's native http server.
       *
       * @return {Function}
       * @api public
       */

      callback() {
        const fn = compose(this.middleware);

        if (!this.listenerCount('error')) this.on('error'this.onerror);

        const handleRequest = (reqres=> {
          const ctx = this.createContext(reqres);
          return this.handleRequest(ctxfn);
        };

        return handleRequest;
      }
  • 相关阅读:
    linux 经常使用网络命令
    ExtJS学习--------Ext.Element中其它操作方法学习
    对“使用MyEclipse,写的jsp代码因有汉字而无法保存”问题的解决
    SQL之case when then用法
    SQL之CASE WHEN用法详解[1]
    [SQL case when的两种用法]
    在delphi中生成GUID
    在delphi中生成GUID/自动获取临时表名......
    Delphi中Owner和Parent的区别
    Delphi处理数据网格DBGrid的编辑框 获取还没有提交到数据集的字段文本
  • 原文地址:https://www.cnblogs.com/TTblog5/p/13097252.html
Copyright © 2011-2022 走看看