NodeJS TypeError:无法读取undefined的属性

时间:2016-10-24 13:28:35

标签: javascript node.js

所以我刚刚开始使用NodeJs仍然有很多需要学习但我很喜欢它到目前为止我遇到了这个问题我找到了答案,但这不是我想要的它有点奇怪,让我展示一些代码并解释

所以我有2个文件

文件1> app.js(主要)

文件2> UserEntity.js(模块)

app.js:

var uEntity = require('./UserEntity.js');

var hm = new uEntity.person();
console.log(hm.info.strUsername);

UserEntity.js:

function User() {
    this.info = {
        'strUsername': 'Hashimoro'
    };
}

module.exports.person = User;

我正在创建一个新的UserEntity我想直接访问这些信息,你可以从代码中看到

但它给出了这个错误:

console.log(hm.info.strUsername);
                   ^

TypeError: Cannot read property 'strUsername' of undefined
    at Object.<anonymous> (D:\NodeLearn\Testing\app.js:4:20)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:394:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:509:3

如果有人可以提供解决方案并且解释会很棒

谢谢你,真的很感激

4 个答案:

答案 0 :(得分:6)

这看起来与通常编写Node模块的方式略有不同。

关于如何编写它们here有很好的资源。

你可以重构这样的事情:

UserEntity.js:

function User() {
  this.info = {
    'strUsername': 'Hashimoro'
  };
}

User.prototype.getInfo = function() {
  return this.info;
};

module.exports = User;

app.js

var Person = require('./UserEntity.js');
var person = new Person();

console.log(person.info.strUsername);

// OR
console.log(person.getInfo().strUsername);

答案 1 :(得分:1)

使用es6类,应该是这样的。对您导出的对象更加明确:

<强> app.js

var uEntity = require('./UserEntity.js');

var hm = new uEntity.person();
console.log(hm.info.strUsername);
hm.sayHello();

<强> UserEntity.js

'use strict';

class User {
  constructor() {
    this.info = {
      'strUsername': 'Hashimoro'
    };
  }

  sayHello () { 
    console.log(`Username is: ${this.info.strUsername}`);
  }
}

module.exports = {
  person: User
};

答案 2 :(得分:0)

也从函数返回info对象。

    function User() {
        this.info = {
            'strUsername': 'Hashimoro'
        };

        return {
            sayHello: ()=> { console.log('Username is: ' + info.strUsername); }
,
info : this.info
        };
    }

    module.exports.person = User;

答案 3 :(得分:0)

就我而言,我尚未添加此JSON中间件

app.use(express.json());