javascript - 请问express这段源码大致是什么意思,app上面的handle方法,init方法哪里来的呀
PHPz
PHPz 2017-04-10 16:05:14
[JavaScript讨论组]
'use strict';
var EventEmitter = require('events').EventEmitter;
var mixin = require('merge-descriptors');
var proto = require('./application');
var Route = require('./router/route');
var Router = require('./router');
var req = require('./request');
var res = require('./response');

/**
 * Expose `createApplication()`.
 */

exports = module.exports = createApplication;

/**
 * Create an express application.
 *
 * @return {Function}
 * @api public
 */

function createApplication() {
  var app = function(req, res, next) {
    app.handle(req, res, next);
  };

  mixin(app, EventEmitter.prototype, false);
  mixin(app, proto, false);

  app.request = { __proto__: req, app: app };
  app.response = { __proto__: res, app: app };
  app.init();
  return app;
}

/**
 * Expose the prototypes.
 */

exports.application = proto;
exports.request = req;
exports.response = res;

/**
 * Expose constructors.
 */

exports.Route = Route;
exports.Router = Router;

/**
 * Expose middleware
 */

exports.query = require('./middleware/query');
exports.static = require('serve-static');

/**
 * Replace removed middleware with an appropriate error message.
 */

[
  'json',
  'urlencoded',
  'bodyParser',
  'compress',
  'cookieSession',
  'session',
  'logger',
  'cookieParser',
  'favicon',
  'responseTime',
  'errorHandler',
  'timeout',
  'methodOverride',
  'vhost',
  'csrf',
  'directory',
  'limit',
  'multipart',
  'staticCache',
].forEach(function (name) {
  Object.defineProperty(exports, name, {
    get: function () {
      throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.');
    },
    configurable: true
  });
});
PHPz
PHPz

学习是最好的投资!

全部回复(2)
迷茫

mixin就是继承的意思,类似jquery的extend或者es6的assign,createApplication首先是创建一个app对象(js里function也是对象),然后继承了EventEimtter(只要是继承一些on,off,trigger的与事件系统相关的方法),然后继承了proto(那些init和handle方法应该就是这里来的),最后又app.request继承了req,app.respond继承了res(__proto__是对象的原型链,具体可以参考js原型继承方面的资料),执行一下app.init进行初始化,并吧app对象return给你

PHPz

注意看代码里的:

mixin(app, proto, false);

意思是说把proto里的所有属性和方法传给app,换句话说,proto有的东西,现在app里也有了。
然后注意:

var proto = require('./application');

其实application文件里就有init方法和handle方法。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号