2012-01-12 15 views
21

Tôi có một module.js phải được tải; Để làm việc cần objectX;Cách yêu cầu tệp trong node.js và chuyển đối số trong phương thức yêu cầu chứ không phải cho mô-đun?

Làm cách nào để chuyển đối tượngX vào mô-đun.js trong phương thức yêu cầu do node.js cung cấp?

nhờ

// my module.js 
objectX.add('abc'); 
// error: objectX is undefined 

Tôi muốn một cách để làm điều đó, mà không cần phải thay đổi tất cả các lớp học của tôi, vì sẽ mất rất nhiều thời gian ... và họ cách thức mà nó là có hiệu suất tốt cho các mặt hàng khác . (Tôi trộn các tệp khách hàng với các tệp máy chủ ***)

Trả lời

45

Mô-đun bạn viết có thể xuất một hàm duy nhất. Khi bạn yêu cầu mô-đun, hãy gọi hàm với đối số khởi tạo của bạn. Hàm đó có thể trả về một đối tượng (băm) mà bạn đặt vào biến của bạn trong mô-đun yêu cầu. Nói cách khác:

main.js

var initValue = 0; 
var a = require('./arithmetic')(initValue); 
// It has functions 
console.log(a); 
// Call them 
console.log(a.addOne()); 
console.log(a.subtractOne()); 

arithmetic.js:

module.exports = function(initValue) { 
    return { 
    addOne: function() { 
     return initValue + 1; 
    }, 
    subtractOne: function() { 
     return initValue - 1; 
    }, 
    } 
} 
+0

Tôi đã cập nhật câu hỏi của tôi: Tôi muốn không phải thay đổi tất cả các tập tin ... –

+1

Tôi ghét phải nói điều đó nhưng objectX cần phải là toàn cầu. Trong tệp gọi của bạn, bạn có thể đặt 'global.objectX =" hi "' – kgilpin

2

Còn cách giải quyết khác như xuất một số phương thức init và truyền đối tượng X làm tham số ngay sau khi yêu cầu?

var module = require('moduleJS'); 
module.init(objectX) 
+0

Tôi đã có rất nhiều lớp học mà như thế này: t.add ({... lớp. ..}); nhưng "t" không xác định. Tôi sẽ cần đến "t" vào module để được thông qua bằng cách nào đó .. Tôi đã thêm một số thông tin trong câu hỏi –

14

Bạn có thể tránh thay đổi các đối tượng xuất khẩu thực tế bằng cách kết nối trong một phương pháp "init" (tên nó bất cứ điều gì bạn muốn).

Mô-đun TestModule.js:

var x = 0; // Some private module data 

exports.init = function(nx) { 
    x = nx; // Initialize the data 
    return exports; 
}; 

exports.sayHi = function() { 
    console.log("HELLO THERE "+x); 
}; 

Và sau đó yêu cầu nó như thế này:

var TM = require('./TestModule.js').init(20); 
TM.sayHi(); 
Các vấn đề liên quan