【问题标题】:NodeJS. Cannot read property of undefined节点JS。无法读取未定义的属性
【发布时间】:2017-09-10 04:12:40
【问题描述】:

在课堂上使用其他方法时遇到问题。 我正在使用 express 框架并且必须使用 Ecma Script 6。 当我尝试在同一个类中使用方法时出现错误:

无法读取未定义的属性“generatePassword”

TypeError:无法读取未定义的属性“generatePassword” 在 createUser (E:\OpenServer\domains\testNode\app\controllers\users.js:5:13) 在 Layer.handle [as handle_request] (E:\OpenServer\domains\testNode\node_modules\express\lib\router\layer.js:95:5) 在下一个(E:\OpenServer\domains\testNode\node_modules\express\lib\router\route.js:131:13) 在 Route.dispatch (E:\OpenServer\domains\testNode\node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (E:\OpenServer\domains\testNode\node_modules\express\lib\router\layer.js:95:5) 在 E:\OpenServer\domains\testNode\node_modules\express\lib\router\index.js:277:22 在 Function.process_params (E:\OpenServer\domains\testNode\node_modules\express\lib\router\index.js:330:12) 在下一个(E:\OpenServer\domains\testNode\node_modules\express\lib\router\index.js:271:10) 在 Function.handle (E:\OpenServer\domains\testNode\node_modules\express\lib\router\index.js:176:3) 在路由器 (E:\OpenServer\domains\testNode\node_modules\express\lib\router\index.js:46:12)

我的代码:

路由:/routes/users.js

const express = require('express');
const router = express.Router();
const users = require('../app/controllers/users');

router.get('/', users.createUser);

module.exports = router;

控制器:/app/controllers/users.js

class Users
{
    createUser(req, res)
    {
        this.generatePassword();
        res.json({msg: "The method return user data" });
    }

    generatePassword()
    {
        return 'The method return new password';
    }
}

module.exports = new Users();

主应用文件:/app.js

const express = require('express');
const path = require('path');
const favicon = require('serve-favicon');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');

const index = require('./routes/index');
const users = require('./routes/users');

const app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  let err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

package.json

{
  "name": "testnode",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.15.2",
    "cookie-parser": "~1.4.3",
    "debug": "~2.2.0",
    "express": "~4.14.0",
    "hbs": "~4.0.1",
    "morgan": "~1.7.0",
    "serve-favicon": "~2.3.0"
  }
}

请帮帮我,谢谢。

【问题讨论】:

标签: node.js express ecmascript-6


【解决方案1】:

在导致错误的行中,对象thisnot what you think it is。要解决此问题,请替换以下内容:

router.get('/', users.createUser);

与:

router.get('/', users.createUser.bind(users));

这将确保当router.get 实现最终调用该函数时,将使用设置为usersthis 对象来调用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 2017-11-02
    • 2018-11-30
    • 2018-05-15
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多