2013-01-25 36 views
39

Tôi cần đóng máy chủ sau khi nhận được cuộc gọi từ địa chỉ /auth/github/callback url. Với thông thường HTTP API đóng máy chủ hiện đang hỗ trợ với server.close([callback]) chức năng API, nhưng với máy chủ nút-express tôi nhận được TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close' lỗi. Và tôi không biết cách tìm thông tin để giải quyết vấn đề này.
Tôi nên đóng máy chủ tốc hành như thế nào?cách đóng đúng máy chủ nút nhanh?

NodeJS ghi chú cấu hình:

$ node --version 
v0.8.17 
$ npm --version 
1.2.0 
$ npm view express version 
3.0.6 

thực tế mã ứng dụng:

var app = express(); 

// configure Express 
app.configure(function() { 
    // … configuration 
}); 

app.get(
    '/auth/github/callback', 
    passport.authenticate('github', { failureRedirect: '/login' }), 
    function(req, res) { 
     res.redirect('/'); 

     setTimeout(function() { 
      app.close(); 
      // TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close' 
     }, 3000) 
    } 
); 

app.listen('http://localhost:5000/'); 

Ngoài ra, tôi đã tìm thấy ‘nodejs express close…’ nhưng tôi không chắc chắn nếu tôi có thể sử dụng nó với mã tôi có: var app = express(); .

Trả lời

49

app.listen() trả về http.Server. Bạn nên gọi close() trên trường hợp đó chứ không phải trên cá thể app.

Ví dụ:

app.get(
    '/auth/github/callback', 
    passport.authenticate('github', { failureRedirect: '/login' }), 
    function(req, res) { 
     res.redirect('/'); 

     setTimeout(function() { 
      server.close(); 
      // ^^^^^^^^^^^ 
     }, 3000) 
    } 
); 

var server = app.listen('http://localhost:5000/'); 

Bạn có thể kiểm tra nguồn: /node_modules/express/lib/application.js

+3

Strange, nó không phải là đóng cửa nếu tôi truy cập một số tuyến đường. –

+1

@Ngày, tôi cũng đã trải nghiệm điều này. Tôi phát hiện ra rằng trình duyệt của tôi đã có một kết nối HTTP1.1 liên tục mở, vì vậy khi tôi nhấn F5 nó xuất hiện như thể máy chủ không đóng. Nếu bạn thử một trình duyệt khác, bạn sẽ thấy ổ cắm máy chủ không hoạt động. –

21

Trong v3 nhanh họ loại bỏ chức năng này.

Bạn vẫn có thể đạt được như vậy bằng cách gán kết quả của app.listen() chức năng và áp dụng chặt chẽ về nó:

var server = app.listen(3000); 
server.close() 

https://github.com/visionmedia/express/issues/1366

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