2016-01-31 2 views
0

У меня есть файл book.js и server.js. Я запускаю node ./server.js, и сервер начинает работать. Я открываю Google Chrome и открываю консоль разработчика, а также inpute book.rate (10), и мой emit ничего не происходит. Возможно, я не понимаю участников событий. Ошибка "Uncaught Reference error: book is not defined"Узел EventEmitter не дает ожидаемые результаты

Server.js

var http = require('http'); 
var BookClass = require('./book.js'); 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World\n'); 
var book = new BookClass(); 
book.on('rated', function() { 
console.log('rated ' + book.getPoints()); 
}); 
}).listen(9000, '127.0.0.1'); 
console.log('Server running at http://127.0.0.1:9000/'); 

Book.js

var util = require("util"); 
var events = require("events"); 
var Class = function() { }; 
util.inherits(Class, events.EventEmitter); 
Class.prototype.ratePoints = 0; 
Class.prototype.rate = function(points) { 
    ratePoints = points; 
    this.emit('rated'); 
}; 
Class.prototype.getPoints = function() { 
    return ratePoints; 
} 
module.exports = Class; 

ответ

1

book is not defined Вы получаете, потому что вы не определили book на стороне клиента, вы только определили его на стороне сервера .

Вы не можете магически обращаться к таким переменным на стороне сервера, как это из браузера, без какой-либо дополнительной библиотеки/кода, чтобы обеспечить такую ​​функциональность.

+0

Это имеет смысл, но как клиент тогда скажет серверу дать рейтинг книги? Я бы предположил, что для обновления базы данных потребуется место. –

+0

Для этого вы можете использовать что-то вроде ['socket.io'] (http://socket.io/docs/). В этом случае вам даже не понадобится настраиваемый EventEmitter, вы можете просто отправлять сообщения от клиента, и вы выполняете соответствующую логику/функцию на стороне сервера. – mscdex

+0

Итак, вы должны определить все переменные в обоих файлах в nodejs? –

Смежные вопросы