[Đau đầu] Vấn đề kế thừa trong nodejs



  • Hiện em có test thử 1 project của tutplus:
    https://github.com/tutsplus/build-complete-website-expressjs

    • Về tính năng, cấu hình hệ thống, các viết lách thấy rất oke nhưng có 1 vài vấn đề với cái model là:
    • Dự án chỉ mới dùng duy nhất 1 collection là fastdelivery-content được set trong file model/base.js, giờ em muốn tạo thêm file model product chẳng hạn và muốn tùy biến cho tham số collection đó động và mà chưa bít set thế nào.

    Bác nào rảnh xem 1 chút giúp em với ạ, e cảm ơn nhiều lần!!!



  • Bạn sửa lại method collection trong file Base.js là ok

    collection: function(collection) {
    		if(this._collection) return this._collection;
    		return this._collection = this.db.collection(collection || 'fastdelivery-content');
    }


  • @Hung-Pham-Do đã nói trong [Đau đầu] Vấn đề kế thừa trong nodejs:

    Bạn sửa lại method collection trong file Base.js là ok

    collection: function(collection) {
    		if(this._collection) return this._collection;
    		return this._collection = this.db.collection(collection || 'fastdelivery-content');
    }
    

    Nếu được thế thì đơn quá e sửa ngay rồi bác ạ, khi e cho collection đó động để sử dụng từ file model truyền sang nó gặp tình trạng là bị nhầm lẫn của nhau và nó chỉ nhận cái model với collection được tạo sau cùng bác ạ :(


  • Global Moderator

    Nếu không sửa trực tiếp được vào mã nguồn. Bạn thử xem cách này được không ? Sử dụng thư viện util sẵn có trong Node.

    // app/models/ProductModel.js
    var Model = require("./Base"),
        util = require("util");
    
    function ProductModel(db) {
        Model.call(this, db);
        this._collectionName = "app_product";
        this.collection = function() {
            if(this._collection) return this._collection;
            return this._collection = this.db.collection(this._collectionName || 'fastdelivery-content');
        }
    
        // Other CURD ...
    }    
        
    util.inherits(ProductModel, Model);
    
    module.exports = ProductModel;
    

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    2


  • @Vũ đã nói trong [Đau đầu] Vấn đề kế thừa trong nodejs:

    Nếu không sửa trực tiếp được vào mã nguồn. Bạn thử xem cách này được không ? Sử dụng thư viện util sẵn có trong Node.

    // app/models/ProductModel.js
    var Model = require("./Base"),
        util = require("util");
    
    function ProductModel(db) {
        Model.call(this, db);
        this._collectionName = "app_product";
        this.collection = function() {
            if(this._collection) return this._collection;
            return this._collection = this.db.collection(this._collectionName || 'fastdelivery-content');
        }
    
        // Other CURD ...
    }    
        
    util.inherits(ProductModel, Model);
    
    module.exports = ProductModel;
    

    @Vũ, thế thì giờ em phải viết các function getlist, get insert cấu trúc thế nào mod nhỉ?


  • Global Moderator

    @Tieu-dang-van bạn thêm vào phần mà mình đã comment ở trên đó, cụ thể thế này

    // app/models/ProductModel.js
    var Model = require("./Base"),
        util = require("util");
    
    function ProductModel(db) {
        Model.call(this, db);
        this._collectionName = "app_product";
        this.collection = function() {
            if(this._collection) return this._collection;
            return this._collection = this.db.collection(this._collectionName || 'fastdelivery-content');
        }
    
        // Other CRUD ...
        this.insert = function(data, callback) {
            data.ID = crypto.randomBytes(20).toString('hex'); 
            this.collection().insert(data, {}, callback || function(){ });
        }
        
        this.update = function(data, callback) {
            this.collection().update({ID: data.ID}, data, {}, callback || function(){ });
        }
        
        this.getlist = function(callback, query) {
            this.collection().find(query || {}).toArray(callback);
        }
        
        this.remove = function(ID, callback) {
            this.collection().findAndModify({ID: ID}, [], {}, {remove: true}, callback);
        }
    }    
        
    util.inherits(ProductModel, Model);
    
    module.exports = ProductModel;
    

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    1


  • @Vũ đã nói trong [Đau đầu] Vấn đề kế thừa trong nodejs:

    @Tieu-dang-van bạn thêm vào phần mà mình đã comment ở trên đó, cụ thể thế này

    // app/models/ProductModel.js
    var Model = require("./Base"),
        util = require("util");
    
    function ProductModel(db) {
        Model.call(this, db);
        this._collectionName = "app_product";
        this.collection = function() {
            if(this._collection) return this._collection;
            return this._collection = this.db.collection(this._collectionName || 'fastdelivery-content');
        }
    
        // Other CRUD ...
        this.insert = function(data, callback) {
            data.ID = crypto.randomBytes(20).toString('hex'); 
            this.collection().insert(data, {}, callback || function(){ });
        }
        
        this.update = function(data, callback) {
            this.collection().update({ID: data.ID}, data, {}, callback || function(){ });
        }
        
        this.getlist = function(callback, query) {
            this.collection().find(query || {}).toArray(callback);
        }
        
        this.remove = function(ID, callback) {
            this.collection().findAndModify({ID: ID}, [], {}, {remove: true}, callback);
        }
    }    
        
    util.inherits(ProductModel, Model);
    
    module.exports = ProductModel;
    

    Cảm ơn anh nhá, em thấy chạy ngon rùi! :))


  • Global Moderator

    @Tieu-dang-van đã nói trong [Đau đầu] Vấn đề kế thừa trong nodejs:

    Cảm ơn anh nhá, em thấy chạy ngon rùi! :))

    Haha. chúc mừng !!!

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    0


  • @Tieu-dang-van sao mình vao robomogon mà ko thấy collection nhỉ


Log in to reply