的NodeJS。 无法读取未定义的属性

在课堂上使用另一种方法有问题。 我正在使用快速框架,并且必须使用Ecma Script 6.当我尝试在同一个类中使用方法时,我有一个错误:

无法读取未定义的属性'generatePassword'

TypeError:无法在Layer.handle [作为handle_request](E:\ OpenServer \ domains \)上的createUser(E:\ OpenServer \ domains \ testNode \ app \ controllers \ users.js:5:13)中读取未定义的属性'generatePassword'在Route.dispatch上的下一个(E:\ OpenServer \ domains \ testNode \ node_modules \ express \ lib \ router \ route.js:131:13)上运行testNode \ node_modules \ express \ lib \ router \ layer.js:95: (E:\ OpenServer \ domains \ testNode \ node_modules \ express \ lib \ test目录下的E:\ OpenServer \ domains \ testNode \ node_modules \ express \ lib \ router \ route.js:112:3)在E:\ OpenServer \ domains \ testNode \ node_modules \ express \ lib \ router \ index.js:277:22位于Function.process_params(E:\ OpenServer \ domains \ testNode \ node_modules)路由器\ layer.js:95: (E:\ OpenServer \ domains \ testNode \ node_modules \ express \ lib \ router \ index.js:271:10)在Function.handle(E:\ Open \ \ OpenServer \ domains \ testNode \ node_modules \ express \ lib \ router \ index.js:176:3)在路由器(E:\ OpenServer \ domains \ testNode \ node_modules \ express \ l IB \路由器\ 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" } } 

请帮助我,谢谢。

在导致错误的行中,这个对象不是你认为的那个 。 要解决这个问题,请更换以下内容:

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

有:

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

这将确保最终该函数何时由router.get实现调用,它将被调用,并将this对象设置为users