【问题标题】:Node.js / Express / JavaScript scope issueNode.js / Express / JavaScript 范围问题
【发布时间】:2015-09-15 19:07:45
【问题描述】:

我正在开发以下 Node.js web 应用程序,其中包含用于模板和路由的把手和 express。 但是app.get('/', function(){ ... })块出现了问题。

问题是当它运行时,它会说Cannot read property 'getData' of undefined at Object.<anonymous> (C:\Users\natha\Documents\GitHub\HAS\webUI\app.js:19:23)

var port     = 3000,
fs       = require('fs'),
exec     = require('child_process'),
express  = require("express"),
exphbs   = require("express3-handlebars"),
app      = express(),
Database = require('./db/Database.js'),
db       = new Database().selectDB('lights')
hbs      = exphbs.create({ defaultLayout: 'main'});


app.engine('handlebars', hbs.engine);
app.set('view engine','handlebars');
var io = require('socket.io').listen(app.listen(port))
app.enable('view cache');
app.use(express.static(__dirname + '/public'));

app.get('/',function(request, response){
    var data = this.db.getData();
    response.render('home', {
        helpers: {
           client: data.clients
        }
    });
});

io.sockets.on('connection', function (socket) {
    updateClients();



    socket.on('news', function(data, error){
        console.log(this.db);
    }.bind(this));
    socket.on('disconnect', function(){
        updateClients();
        console.log('hi');
    });

}.bind(this));

var updateClients = function(){
    var clients = [];
    io.sockets.clients().forEach(function(data){
        clients.push(data.id);
    });

    io.sockets.emit('news', { 
        users: clients
    });
}

我 100% 确定这不是异步函数问题,因为当socket.on('news', ....) 在数据库初始化后很长时间由客户端触发时,它会成功打印包括数据在内的数据库信息..

这一定是范围问题,但我似乎无法修复它。

【问题讨论】:

  • 也许你的意思是db而不是this.db
  • 显然我做了一些愚蠢的事情......在初始化setDB 之后,我不得不调用new Database() .. 现在我想起来了,这是有道理的。无论如何谢谢:)

标签: javascript node.js express scope


【解决方案1】:

去掉this就行了,db只是一个变量,所以应该是db.getData()

【讨论】:

  • 显然我做了一些愚蠢的事情......我不得不在初始化setDB 之后调用new Database() .. 现在我想起来了,这是有道理的。无论如何谢谢:)
  • @NathanPrins 发生了! JavaScript 的棘手之处在于随时跟踪 this 的内容。
猜你喜欢
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2023-03-25
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多