的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
。
- 使用可变子域进行通配符路由
- ENOENT,没有这样的文件或目录
- 如何访问发送给Expressjs应用程序客户端的响应代码
- 使用react-hot-loader v3和webpack-hot-middleware时,error development没有定义错误
- 通过使用body parser,node js的POST方法将一个variables从HTML表单传递到mongodb查询中
- 如何在NodeJs中扩展express js res对象
- 为会话设置服务器端cookie的正确方法
- asynchronous系列nodejs中的asynchronousforeach
- 如何从Node服务器获取请求pathvariables值到AngularJS控制器