2014-09-02 15 views
10

Tôi đang gặp sự cố khi sử dụng trong tệp cấu hình tập hợp cấu hình var trong tệp cấu hình khác. Ví dụ.Truy cập các biến cấu hình từ các tệp cấu hình khác

// file - config/local.js 
module.exports = { 
    mongo_db : { 
    username : 'TheUsername', 
    password : 'ThePassword', 
    database : 'TheDatabase' 
    } 
} 

// file - config/connections.js 
module.exports.connections = { 
    mongo_db: { 
    adapter: 'sails-mongo', 
    host: 'localhost', 
    port: 27017, 
    user: sails.config.mongo_db.username, 
    password: sails.config.mongo_db.password, 
    database: sails.config.mongo_db.database 
    }, 
} 

Khi tôi buồm thang ', tôi nhận được lỗi sau:

user: sails.config.mongo_db.username, 
    ^
ReferenceError: sails is not defined 

Tôi có thể truy cập các biến cấu hình ở những nơi khác - ví dụ, công trình này:

// file - config/bootstrap.js 
module.exports.bootstrap = function(cb) { 
    console.log('Dumping config: ', sails.config); 
    cb(); 
} 

này đổ tất cả các thiết lập cấu hình vào giao diện điều khiển - tôi thậm chí có thể thấy các cài đặt cấu hình cho mongo_db trong đó!

Tôi rất nhầm lẫn.

Trả lời

15

Bạn không thể truy cập sails bên trong tệp cấu hình vì cấu hình Sails vẫn đang được tải khi các tệp đó được xử lý! Trong bootstrap.js, bạn có thể truy cập vào cấu hình bên trong hàm bootstrap, vì hàm đó được gọi sau khi Sails được tải, nhưng không phải ở trên chức năng.

Trong mọi trường hợp, config/local.js bị sáp nhập trên đầu trang của tất cả các file cấu hình khác, vì vậy bạn có thể nhận được những gì bạn muốn theo cách này:

// file - config/local.js 
module.exports = { 
    connections: { 
    mongo_db : { 
     username : 'TheUsername', 
     password : 'ThePassword', 
     database : 'TheDatabase' 
    } 
    } 
} 

// file - config/connections.js 
module.exports.connections = { 
    mongo_db: { 
    adapter: 'sails-mongo', 
    host: 'localhost', 
    port: 27017 
    }, 
} 

Nếu bạn thực sự cần phải truy cập một tệp cấu hình từ một tệp khác mà bạn luôn có thể sử dụng require nhưng không được khuyến nghị. Vì Sails kết hợp các tệp cấu hình với nhau dựa trên một số yếu tố (bao gồm cả môi trường hiện tại), có thể bạn sẽ đọc một số tùy chọn không hợp lệ. Cách tốt nhất để thực hiện những điều theo ý định: sử dụng các tệp config/env/* cho các cài đặt dành riêng cho môi trường (ví dụ: config/env/production.js), config/local.js cho các cài đặt cụ thể cho một hệ thống đơn lẻ (như máy tính của bạn) và phần còn lại của các tệp cho cài đặt được chia sẻ.

+0

Tuyệt vời - điều đó có ý nghĩa. Tôi đoán tôi đã bị ném bởi @mikermcneil bình luận về câu hỏi này: http://stackoverflow.com/questions/18267706/ (xem bình luận cuối cùng, nơi ông dường như xác nhận bạn có thể truy cập vào các cấu hình vars bên trong của các tập tin cấu hình khác) Cảm ơn - Tôi sẽ thử sử dụng kết hợp của config/env và config/local. – onblur

+0

Vâng, tôi không chắc anh ấy có ý định trả lời bình luận trước đó không! – sgress454

+1

khung làm việc tồi tệ nhất mà tôi từng thấy. dẫn đến sự cần thiết phải lặp lại mã nếu bạn định làm bất cứ điều gì đáng chú ý trong config/http, như nói truy cập redis – r3wt

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