2012-03-20 29 views
11

Tôi không thể tìm ra cách để máy chủ tốc hành chạy một chức năng đơn giản khi máy chủ khởi động. Đâu là nơi thích hợp để gọi một hàm để chạy khi khởi động máy chủ và cú pháp thích hợp?Làm thế nào để chạy một hàm khi máy chủ Express khởi động?

tôi có các chức năng trong các tuyến đường của tôi nộp như exports.myFunction = function() { code here};

tôi đã cố gắng gắn bó nó trong khối app.configure như routes.myFunction. Tôi đã thử thay đổi nó trong các tuyến đường để chỉ là myfunction() { code}, sau đó gọi nó trong khối cấu hình là routes.myfunction(), không có may mắn ở đó. Hàm cần phải ở trong tệp chứa các tuyến của tôi vì nó thay đổi một số biến toàn cầu ở đó.

Tôi biết đó là một số điều cú pháp đơn giản ngu ngốc, nhưng tôi dường như không thể tìm thấy bất kỳ gợi ý nào here hoặc trên google. Cảm ơn rất nhiều vì đã giúp đỡ!

Trả lời

22

Sử dụng sự kiện này:

app.on('listening', function() { 
    // server ready to accept connections here 
}); 

Thành thật mà nói app trả về bởi express.createServer() là chỉ http.Server, vì vậy tất cả mọi thứ được mô tả trong nodejs docs related to http.Server có ý nghĩa cho rõ ràng và railwayjs.

+0

Tuyệt vời! Đây chính xác là những gì tôi cần =) – kjb

+0

Nó không có tác dụng đối với tôi. Tôi nghĩ rằng nó liên quan đến thực tế là các tập tin 'www' từ máy phát điện đã có một sự kiện' nghe'? –

6

Tôi sẽ giữ nó đơn giản. Trong mô-đun nơi bạn gọi app.listen(port), chỉ cần gọi chức năng khởi động của bạn ngay trước (hoặc sau). Nếu bạn cần chức năng đó để cư trú trong một mô-đun riêng biệt đầy đủ các tuyến đường khác, chỉ cần xuất nó để mô-đun chính của bạn server.js có thể gọi nó khi khởi động. Nếu bạn vẫn không hài lòng với điều đó, hãy xem xét có thể ràng buộc một trình lắng nghe sự kiện ở đâu đó trong express/connect, mặc dù tôi không chắc chắn một sự kiện "khởi động" rõ ràng được phát ra.

Trong server.js (hoặc bất kỳ mô-đun bạn khởi động máy chủ rõ ràng của bạn), làm điều này:

var myRoutes = require("./myroutes"); 
var app = express.createServer(); 
... 
app.listen(8080, "127.0.0.1", function() { 
    myRoutes.myFunction(); 
}); 

Bạn cũng có thể liên kết với "lắng nghe" sự kiện như @Anatoly nói. docs for the listening event are here.

+0

hmm, vẫn không có may mắn. Tôi không nhận được bất kỳ dấu hiệu cho thấy chức năng thực sự đang chạy, nhưng cũng không có lỗi. =/ – kjb

+0

Ý của bạn là gì bằng cách "xuất nó để mô-đun server.js chính của bạn có thể gọi khi khởi động"? Hãy tha thứ cho tôi vì tôi mới với express/javascript – kjb

+0

Nó sẽ không hoạt động vì bản chất không đồng bộ của phương thức 'listen'. – Anatoliy

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