需要时未定义节点模块
Node module is undefined when required
当我尝试需要一个节点模块时,我遇到了一个非常奇怪的错误。 为了说明这个问题,这是我试图要求的代码:
module.exports = (function(){
this.say = function(message) {
console.log(message);
}
})();
现在,当我需要此模块时,当我尝试按如下方式使用它时,我得到"无法读取未定义的属性'说':
var person = require('./Person.js')
person.say('Hello World!');
然而,如果我按如下方式定义模块,它可以正常工作......
module.exports = {
say : function(message) {
console.log(message);
}
};
我什至尝试了这种也有效的符号...
module.exports = new Person();
function Person(){
this.say = function(message) {
console.log(message);
}
};
有谁知道为什么第一个符号不能正常工作?
原因是您的第一个表示法不返回要导出的任何内容。
module.exports = (function(){
this.say = function(message) {
console.log(message);
}
return this;
})();
我想这应该可以解决你的问题。
module.exports 是一个对象,将在require
调用该文件时返回。因此,假设您要编写一个执行某些逻辑的库,有些是私有的,有些是公共的。并且你只想向其他人公开你的公共函数来调用,您的文件可能看起来像:
// Some require calls you maybe using in your lib
function privateFunc(s) {
console.log(s);
}
function publicFunc(s) {
privateFunc("new log: " + s);
}
module.exports = {
log: publicFunc
}
稍后将按如下方式使用它:
var logger= require('myLib');
logger.log("my log");
这将输出:
new log: my log
这可能比你真正想要的更深,但它意味着理解事物的流程
相关文章:
- 节点模块依赖关系
- 如何引用HTML中节点模块中的js文件
- 未定义应为节点模块的对象
- 如何在客户端javascript中需要节点模块
- 如何在节点模块中从命令行运行函数
- 将节点模块添加到gitignore
- 使用Q节点模块时,Bluemix node.js应用程序部署失败
- 使用document.cookie将客户端javascript转换为节点模块
- 查找与锁定和更新调度相关的一个或两个节点模块
- 节点模块的可能结构
- 节点模块对象范围:在所有函数之间共享一个对象
- 有没有一种方法可以使用javascript和节点模块(oracledb)将csv导入oracle数据库
- 单元测试节点模块与mocha,模块变量行为怪异
- 要安装依赖项的自定义节点模块
- Node.js如何将链接标记解析为节点模块
- 如何公开JS节点模块
- 如何访问节点模块中具有相对路径的文件
- 节点模块和常规javascript文件之间的区别是什么
- Npm.require可以'找不到节点模块
- 将参数传递给基于类的节点模块