2011-09-09 30 views
58

Khi tôi làm:Node.js "đòi hỏi" chức năng và thông số

lib = require('lib.js')(app) 

được app thực geting thông qua năm?

trong lib.js:

exports = module.exports = function(app){} 

Có vẻ như không có, kể từ khi tôi cố gắng làm nhiều hơn là chỉ (app) và thay vào đó làm:

lib = require('lib.js')(app, param2) 

Và:

exports = module.exports = function(app, param2){} 

Tôi không nhận được params2.

tôi đã cố gắng để gỡ lỗi bằng cách thực hiện:

params = {} 
params.app = app 
params.param2 = "test" 

lib = require("lib.js")(params) 

nhưng trong lib.js khi tôi cố gắng JSON.stringify tôi nhận được lỗi này:

"DEBUG: TypeError: Converting circular structure to JSON" 
+0

Biến bạn đang chuyển là gì? Chúng được khai báo và xác định? –

Trả lời

82

Khi bạn gọi lib = require("lib.js")(params)

Bạn đang thực sự gọi số lib.js với một thông số có chứa hai thuộc tính name appparam2

Bạn có thể muốn

// somefile 
require("lib.js")(params); 
// lib.js 
module.exports = function(options) { 
    var app = options.app; 
    var param2 = options.param2; 
}; 

hoặc

// somefile 
require("lib.js")(app, param2) 
// lib.js 
module.exports = function(app, param2) { } 
+0

+1 để trả lời phần OP được thêm vào sau câu trả lời của tôi: \ –

+0

@JimSchubert xin lỗi mr schubert :( – Raynos

+10

Chỉ ghen tị vì câu trả lời của bạn chính xác hơn: ( –

18

Bạn có thể có một giá trị không xác định rằng bạn đang cố gắng để vượt qua trong

Đưa ví dụ, requires.js:.

module.exports = exports = function() { 
    console.log('arguments: %j\n', arguments); 
}; 

Khi y ou gọi nó một cách chính xác, nó hoạt động:

node 
> var requires = require('./requires')(0,1,2,3,4,5); 
arguments: {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5} 

Nếu bạn có một lỗi cú pháp, nó không thành công:

> var requires = require('./requires')(0,); 
... var requires = require('./requires')(0,2); 
... 

Nếu bạn có một đối tượng không xác định, nó không hoạt động:

> var requires = require('./requires')(0, undefined); 
arguments: {"0":0} 

Vì vậy, trước tiên tôi sẽ kiểm tra xem đối tượng của bạn đã được xác định đúng chưa (và đánh vần đúng cách khi bạn truyền vào), sau đó kiểm tra xem bạn không có lỗi cú pháp hay không.

+1

Cảm ơn bạn. Lỗi của tôi là tôi quên thay đổi số – user885355

+0

Bây giờ tôi hiểu cách làm việc này tốt hơn một chút Câu hỏi còn lại của tôi bây giờ là về lỗi JSON, hầu hết mọi người chỉ gỡ lỗi thông qua trình duyệt? – user885355

+0

Theo như tôi biết, hầu hết mọi người sử dụng 'util.inspect' để kiểm tra các đối tượng (điều này được thực hiện bên trong với' console.log'). Bạn cũng có thể sử dụng trình kiểm tra nút (xem [article] (http://howtonode.org/debugging-with-node-inspector) để biết hướng dẫn bằng video). node-inspector là bộ kiểm tra webkit (như CTRL + SHIFT + J trong Chrome), nó lắng nghe 'node --debug'. –

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