2016-07-02 2 views
1

Я новичок в nodejs.Проблема с nodejs cache с module.exports

У меня есть этот скрипт: book.js

var page = 0; 

exports.setPageCount = function (count) { 
    page = count; 
} 

exports.getPageCount = function(){ 
    return page; 
} 

Наряду со сценарием follownig: scripts.js

var bookA = require('./book'); 

var bookB = require('./book'); 

bookA.setPageCount(10); 

bookB.setPageCount(20); 

console.log("Book A Pages : " + bookA.getPageCount()); 

console.log("Book B Pages : " + bookB.getPageCount()); 

Выход я получаю:

Book A Pages : 20 
Book B Pages : 20 

Итак, я изменил сценарий:

module.exports = function(){ 
    var page = 0; 

    setPageCount : function(count){ 
     page = count; 
    }, 

    getPageCount : function(){ 

     return page; 
    } 

} 

Я ожидаю следующий вывод:

Book A Pages : 10 
Book B Pages : 20 

Но по-прежнему получать первоначальный результат, кто-нибудь есть идеи, где я сделал ошибку?

ответ

2

Есть несколько способов, чтобы идти об этом и последней попытке почти действительный один - изменить ваш модуль, как так:

module.exports = function() { 
    var pages = 0; 
    return { 
    getPageCount: function() { 
     return pages; 
    }, 
    setPageCount: function(p) { 
     pages = p; 
    } 
    } 
} 

и ваше использование, как так:

var bookFactory = require('./book'); 
var bookA = bookFactory(); 
var bookB = bookFactory(); 
bookA.setPageCount(10); 
bookB.setPageCount(20); 
console.log("Book A Pages : " + bookA.getPageCount()); 
console.log("Book B Pages : " + bookB.getPageCount()); 
+0

вар bookA = bookFactory(); ^ TypeError: bookFactory не является функцией –

+0

Вы также можете выбрать «класс» или «прототип» из своего модуля и использовать ключевое слово 'new'. Много способов добиться того, что вы ищете. – daf

+0

Я отредактировал свое сообщение, чтобы отразить изменения в вашем модуле - слишком быстро прочитайте свою вторую попытку и на ретроспекцию, поняли, что это тоже нужно изменить. Извиняюсь. – daf

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