У меня есть файл 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;
Это имеет смысл, но как клиент тогда скажет серверу дать рейтинг книги? Я бы предположил, что для обновления базы данных потребуется место. –
Для этого вы можете использовать что-то вроде ['socket.io'] (http://socket.io/docs/). В этом случае вам даже не понадобится настраиваемый EventEmitter, вы можете просто отправлять сообщения от клиента, и вы выполняете соответствующую логику/функцию на стороне сервера. – mscdex
Итак, вы должны определить все переменные в обоих файлах в nodejs? –