您将使用 Node 的 require 函数来使用 express 模块。 require 类似于其他语言中的 import 或 include 等关键字。 require 将包的名称作为字符串参数并返回一个包。返回的对象没有什么特别之处——它通常是一个对象,但它可以是一个函数、一个字符串或一个数字。
var express = require('express');
=> 需要 Express 模块,就像您需要其他模块一样,并将其放入变量中。
var app = express();
=> 调用 express 函数“express()”并将新的 Express 应用程序放入 app 变量中(以启动新的 Express 应用程序)。
这就像您正在创建一个类的对象。其中“express()”就像类,app 是新创建的对象。
通过查看下面的 express 代码,您可以了解里面真正发生的事情。
文件 1:index.js
'use strict';
module.exports = require('./lib/express');
文件 2:lib/express.js
'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;
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;
}
exports.application = proto;
exports.request = req;
exports.response = res;
exports.Route = Route;
exports.Router = Router;
});
require 的工作原理
当你在 node 中调用 require('some_module') 时会发生什么:
如果当前文件夹节点中存在名为 some_module.js 的文件,则会加载该文件,否则:
Node 在当前文件夹中查找 node_modules 文件夹,其中包含 some_module 文件夹。
如果没有找到,它会上一个文件夹并重复步骤2
这个循环一直重复,直到节点到达文件系统的根文件夹,此时它将检查所有全局模块文件夹(例如 Mac OS 上的 /usr/local/node_modules),如果它仍然找不到 some_module 它会抛出异常。