当前位置: 首页 > 知识库问答 >
问题:

节点。js简单项目:引用错误:未定义

裘嘉木
2023-03-14

我试着学习节点。js(ES6)但在require

这是我的结构:

BaseModel.js

"use strict";

class BaseModel {
  constructor(options = {}, data = []) { // class constructor
      this.name = 'Base'
      this.url = 'http://azat.co/api'
      this.data = data
      this.options = options
    }

    getName() { // class method
        console.log(`Class name: ${this.name}`)
    }
}

会计模型。js

"use strict";

require('./baseModel.js');

class AccountModel extends BaseModel {
    constructor(options, data) {

    super({private: true}, ['32113123123', '524214691']) //call the parent method with super
      this.name += 'Account Model'
      this.url +='/accounts/'
    }


    get accountsData() { //calculated attribute getter
    // ... make XHR
        return this.data
    }

}

主要的js

"use strict";

require('./AccountModel.js');

let accounts = new AccountModel(5)

accounts.getName()

console.log('Data is %s', accounts.accountsData);

现在我运行:node——harmony默认参数main。js

和获取错误:

ReferenceError:对象上未定义BaseModel。(/Users/tamirscherzer/POC/projects/NodeJS/tutorials/classes/AccountModel.js:5:28)在模块中_在对象处编译(module.js:397:26)。模块_扩展。。js(module.js:404:10)在模块中。在函数处加载(module.js:343:32)。模块_在模块处加载(module.js:300:12)。require(module.js:353:17)at require(internal/module.js:12:17)at对象。模块中的(/Users/tamirscherzer/POC/projects/NodeJS/tutorials/classes/main.js:5:1)_在对象处编译(module.js:397:26)。模块_扩展。。js(module.js:404:10)

真奇怪,如果我更改require('./baseModel.js') 到另一个名字,我得到错误,文件找不到,所以路径写正确。

还定义了权限777-同样的事情,BaseModel没有定义

有什么想法吗?


共有1个答案

徐焱
2023-03-14

当您在节点中定义变量时,它不会像在浏览器中一样添加到全局范围-它是该文件/模块的本地变量。因此,您不能简单地导入一个文件并期望您在其中定义的内容可用——您必须显式地导出和导入它们。

基本模型。js:

class BaseModel {
  constructor(options = {}, data = []) { // class constructor
      this.name = 'Base'
      this.url = 'http://azat.co/api'
      this.data = data
      this.options = options
    }

    getName() { // class method
        console.log(`Class name: ${this.name}`)
    }
}

module.exports = BaseModel;

会计odel.js:

"use strict";

let BaseModel = require('./baseModel.js');

class AccountModel extends BaseModel {
    constructor(options, data) {

    super({private: true}, ['32113123123', '524214691']) //call the parent method with super
      this.name += 'Account Model'
      this.url +='/accounts/'
    }


    get accountsData() { //calculated attribute getter
    // ... make XHR
        return this.data
    }

}

module.exports = AccountModel;

main.js:

"use strict";

let AccountModel = require('./AccountModel.js');

let accounts = new AccountModel(5)

accounts.getName()

console.log('Data is %s', accounts.accountsData);
 类似资料:
  • 我刚安装了node。js。我试着编写node-v来检查版本,但它不起作用。这是输出: 我用git命令打开了它: 我试着用“Git”运行它,我想也许这就是问题所在,我得到了完全相同的输出。 如果相关的话,我使用的是windows 8-一直遵循本教程: https://www.youtube.com/watch?v=tlntE8fe6u4 http://youtu.be/FqMIyTH9wSg 我该怎

  • 我已经启动了一个节点。使用express generator的js应用程序,我遇到了一个奇怪的问题,无法通过浏览器查看页面两次,第一次加载正常,第二次加载不正常,因为节点进程以以下错误结束: 包裹json

  • 当我运行命令我得到以下错误:- 我谷歌了一下,尝试了很多东西,都没有成功。

  • 问题内容: 使用节点8.4.0: 但是,以下错误也不是交互式的:(唯一的区别是分号) 同样在Chrome控制台中: 有人可以解释吗? 澄清度 这与按预期工作的let,var或cosnt解构无关。这与先前定义的变量(或非严格模式)有关:从chrome控制台: 问题答案: 将对象分解为现有变量的正确语法是 这允许成为一种表达。否则,将其解释为带有逗号运算符的块,这将导致错误。 它在控制台中不带括号和分

  • 我正在尝试创建一个简单的地址簿, 但它会打印错误 .../通讯录。js:8这个。联络。推(接触)^ TypeError:无法读取地址簿上未定义的属性“push”。在对象上添加联系人(/home/maku/Documents/epicodus/addressBook.js:8:19)。(/home/maku/Documents/epicodus/addressBook.js:25:13)在模块中_在