2015-10-12 13 views
5

Làm thế nào để bạn gọi một hàm từ bên trong một hàm khác trong khai báo module.exports?Nút JS gọi chức năng "cục bộ" trong mô-đun.exports

Tôi có dự án nút cấu trúc MVC js và bộ điều khiển được gọi là TestController.js. Tôi muốn truy cập phương pháp trong điều khiển, nhưng sử dụng this từ khóa cho dưới đây lỗi:

cannot call method getName of undefined

"use strict" 
module.exports = { 
    myName : function(req, res, next) { 
     // accessing method within controller 
     this.getName(data); 
    }, 

    getName : function(data) { 
     // code 
    } 
} 

Làm thế nào để truy cập vào các phương pháp trong điều khiển?

+1

Giá trị của 'this' phụ thuộc vào bối cảnh thực hiện, không phải là cách các chức năng được xác định. – adeneo

Trả lời

12

Tôi tìm thấy giải pháp :-)

"use strict" 
var self = module.exports = { 
    myName : function(req, res, next) { 
     // accessing method within controller 
     self.getName(data); 
    }, 

    getName : function(data) { 
     // code 
    } 
} 
+0

'' 'this.getName (dữ liệu)' '' sẽ vẫn hoạt động, nhưng đây là ý tưởng hay khi gán quy ước đặt tên – FrickeFresh

3

Bạn có thể truy cập vào máng chức năng getNamemodule.exports. Giống như vậy:

"use strict" 
module.exports = { 
    myName : function(req, res, next) { 
     // accessing method within controller 
     module.exports.getName(data); 
    }, 

    getName : function(data) { 
     // code 
    } 
} 
7

Có thể bạn có thể làm điều đó như thế này. Nó làm giảm làm tổ. Và tất cả việc xuất của bạn được thực hiện ở cuối tệp của bạn.

"use strict"; 

var _getName = function() { 
    return 'john'; 
}; 

var _myName = function() { 
    return _getName(); 
}; 

module.exports = { 
    getName : _getName, 
    myName : _myName 
}; 
+1

Thêm lợi ích của phương pháp này là các hàm có thể tham chiếu lẫn nhau (tức là '_myName' có thể gọi' _getName') –

+0

Tuyệt đối, tôi nghĩ nó cũng thanh lịch hơn so với giải pháp khác. Không sử dụng * self * và bạn có thể thêm chức năng riêng vào module. – Sapher

Các vấn đề liên quan