查看的框架的随机源文件,有两行我不理解的代码(这些代码行几乎是所有NodeJS文件的代表)。express``NodeJS
/**
* Expose `Router` constructor.
*/
exports = module.exports = Router;
和
/**
* Expose HTTP methods.
*/
var methods = exports.methods = require('./methods');
我知道 第一段代码 允许文件中的其余功能公开给NodeJS应用程序使用 ,但我不清楚 它的工作原理 或该行代码的含义。
什么
exports
和module.exports
实际上的意思吗?
我相信第二段代码允许访问文件中的函数methods
,但同样,它是如何做到这一点的。
基本上,这些是什么神奇的话: module
和 exports
?
更具体:
module
是文件内的全局范围变量。
因此,如果您致电require("foo")
:
// foo.js
console.log(this === module); // true
它的行为与window
在浏览器中的行为相同。
还有一个称为的全局对象global
,您可以在所需的任何文件中进行读写,但这涉及到更改全局范围,这就是 EVIL
exports
是存在的变量module.exports
。基本上,这是您在需要文件时 导出 的内容。
// foo.js
module.exports = 42;
// main.js
console.log(require("foo") === 42); // true
单独存在一个小问题exports
。在_global范围上下文+和module
是 不
一样的。(在浏览器中,全局范围上下文与之window
相同)。
// foo.js
var exports = {}; // creates a new local variable called exports, and conflicts with
// living on module.exports
exports = {}; // does the same as above
module.exports = {}; // just works because its the "correct" exports
// bar.js
exports.foo = 42; // this does not create a new exports variable so it just works
问题内容: 在NodeJS 模块 的文档中,示例代码包含。 什么是功能,它在哪儿定义? 问题答案: app对象在创建Express服务器时实例化。它具有一个可以在其中定制的 _ 中间件 堆栈_(现在在4.x版中已弃用)。 要设置中间件,您可以为要添加的每个中间件层调用(可以对所有路径通用,也可以仅在服务器处理的特定路径上触发),并将其添加到Express中间件堆栈中。中间件层可以在的多个调用中一个
问题内容: 在github上研究node.js源代码时,我已经看过很多次了。 谁能解释这个功能的作用? 问题答案: 该函数返回内部模块,如require。它不是公共的,因此您不应在代码中依赖它,但如果您想了解事物的工作原理,则可以将其用于节点的低级对象。 例如,在这里 注册绑定。它导出 构造函数。在它的进口
问题内容: 我在我的应用程序中使用了express以及body-parser。 但是,express 4.0中的“扩展”是什么意思? 我找到了这个 但是,我仍然不能理解它的含义。 问题答案: 如果为,则不能发布“嵌套对象” 如果为,则可以按照自己喜欢的方式进行操作。
问题内容: 我有一个类似于以下的简单代码,并将其作为节点模块执行: 我知道这是默认上下文(例如在浏览器中),但是关键字指的是什么? 问题答案: (在模块的上下文中)与node.js中的相同。但是,通常应该使用/ 代替,这样可以清楚地清除正在修改的内容。
本文向大家介绍module.exports与exports的区别是什么?相关面试题,主要包含被问及module.exports与exports的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 exports 返回的是模块函数 module.exports 返回的是模块对象本身,返回的是一个类 使用上的区别是 exports的方法可以直接调用 module.exports需要new对象之后才
问题内容: 尽管非常了解JavaScript,但我对Node.js生态系统中的这三个项目的 确切 用途感到困惑。像Rails的架子吗?有人可以解释一下吗? 问题答案: [ 更新: 从4.0版本开始,Express不再使用Connect。但是,Express仍与为Connect编写的中间件兼容。我的原始答案如下。 我很高兴您对此提出疑问,因为对于那些关注Node.js的人们来说,这无疑是一个常见的困