什么需要 return 以及为什么我们需要将变量作为函数访问以获取其值 - 在 Nodejs 中?
What does require return and why do we need to access the variable as a function to get its value - in Nodejs?
https://nodejs.org/api/modules.html#requireid
require(id)# Added in: v0.1.13 id module name or path
Returns: exported module content
“模块内容”是什么意思?
const x = require('express');
const y = x();
x() 中存储了什么?
为什么我们需要将 x 作为函数访问并将其存储在 y 中?
一个module是一堆相关代码。
Express 是一个模块。
模块可以导出值(很像对象属性有值)。
导出的值可以是任何类型的值。
函数是一种值。
Express导出的值是一个函数。
你能看出来是因为 the documentation tells you to call it as a function and also by looking at the source code.
Express
导出一个函数,为了使用它,你应该调用那个函数。为了更好地了解正在发生的事情,假设您有这些文件:
function.js
:
const foo = () => console.log("Hello Word");
module.exports = foo;
index.js
:
const x = require('./function');
// x == foo
x(); // will log Hello Word
如果您在 function.js
中没有 module.exports = foo
,x
将等于 {}
。
require(id)
是用于导入模块的 CommonJS 语法,无论是通过它们的 npm 包名称还是 js/json 文件的路径。当使用 "express"
等包名调用该函数时。该包在 node_modules
目录中查找,如果 main
文件不存在,它会尝试在 node_modules/express/package.json
文件 或 中找到入口点specified (as the case of express) node_modules/express/index.js
可以使用。
跟随 index.js
的导入,带你 lib/express.js
可以找到主要导出函数的地方:
/**
* 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);
// expose the prototype that will get set on requests
app.request = Object.create(req, {
app: { configurable: true, enumerable: true, writable: true, value: app }
})
// expose the prototype that will get set on responses
app.response = Object.create(res, {
app: { configurable: true, enumerable: true, writable: true, value: app }
})
app.init();
return app;
}
如您在上面的代码片段中所见,x
是 express 的 createApplication
函数,因为它已分配给 export
变量。至于为什么需要调用 x
函数,这只是表达选择的实例化应用程序的方式,其他包的做法不同。
https://nodejs.org/api/modules.html#requireid
require(id)# Added in: v0.1.13 id module name or path
Returns: exported module content
“模块内容”是什么意思?
const x = require('express');
const y = x();
x() 中存储了什么?
为什么我们需要将 x 作为函数访问并将其存储在 y 中?
一个module是一堆相关代码。
Express 是一个模块。
模块可以导出值(很像对象属性有值)。
导出的值可以是任何类型的值。
函数是一种值。
Express导出的值是一个函数。
你能看出来是因为 the documentation tells you to call it as a function and also by looking at the source code.
Express
导出一个函数,为了使用它,你应该调用那个函数。为了更好地了解正在发生的事情,假设您有这些文件:
function.js
:
const foo = () => console.log("Hello Word");
module.exports = foo;
index.js
:
const x = require('./function');
// x == foo
x(); // will log Hello Word
如果您在 function.js
中没有 module.exports = foo
,x
将等于 {}
。
require(id)
是用于导入模块的 CommonJS 语法,无论是通过它们的 npm 包名称还是 js/json 文件的路径。当使用 "express"
等包名调用该函数时。该包在 node_modules
目录中查找,如果 main
文件不存在,它会尝试在 node_modules/express/package.json
文件 或 中找到入口点specified (as the case of express) node_modules/express/index.js
可以使用。
跟随 index.js
的导入,带你 lib/express.js
可以找到主要导出函数的地方:
/**
* 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);
// expose the prototype that will get set on requests
app.request = Object.create(req, {
app: { configurable: true, enumerable: true, writable: true, value: app }
})
// expose the prototype that will get set on responses
app.response = Object.create(res, {
app: { configurable: true, enumerable: true, writable: true, value: app }
})
app.init();
return app;
}
如您在上面的代码片段中所见,x
是 express 的 createApplication
函数,因为它已分配给 export
变量。至于为什么需要调用 x
函数,这只是表达选择的实例化应用程序的方式,其他包的做法不同。