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;
      }
  • 相关阅读:
    Html页面添加百度地图
    Redis Sentinel主从高可用方案
    redis分布式锁-SETNX实现
    使用RestTemplate访问restful服务时遇到的问题
    RestTemplate
    webservice服务器端获取request对象的三种方式
    Apache软件基金会项目百度百科链接
    JAX-RPC 与 JAX-WS 的比较
    angular+ionic前后端分离开发项目中的使用
    WebService之soap类型的服务和rest类型的服务
  • 原文地址:https://www.cnblogs.com/TTblog5/p/13097252.html
Copyright © 2011-2022 走看看