2013-09-04 47 views
13

Tôi đang xây dựng một phụ trợ REST cho SPA với NodeJS, Restify và PassportJS để xác thực. Mọi thứ đều hoạt động ngoại trừ bước cuối cùng, chuyển hướng máy khách từ backends/login/facebook/callback đến trang chủ của ứng dụng.Chuyển hướng ứng dụng khách bằng NodeJS và Restify

Tôi đã tìm kiếm trực tuyến và tìm thấy rất nhiều câu trả lời cho ExpressJS nhưng không có gì hữu ích cho Node-Restify. Tôi đã quản lý để nhặt một vài đoạn mã và đây là những gì tôi đang cố gắng vào lúc này:

app.get('/api/v1/login/facebook/cb', passport.authenticate('facebook', { scope: 'email' }), function(req, res) { 
    req.session.user = req.user._id; 
    res.header('Location', '/#/home'); 
    res.send(); 
}); 

Câu trả lời sẽ được gửi nhưng tiêu đề vị trí không được bao gồm và khách hàng được trình bày với một màu trắng màn. Làm thế nào để tôi thực hiện chuyển hướng thích hợp bằng cách sử dụng API Node-Restify?

Trả lời

14

Restify của giao diện đáp ứng now has a redirect method.

Theo văn bản này, có một thử nghiệm cho thấy cách sử dụng nó here.

Nội dung của bài kiểm tra đó là:

server.get('/1', function (req, res, next) { 
    res.redirect('https://www.foo.com', next); 
}); 

Nhiều folks người sử dụng Restify là quen thuộc hơn với ExpressJS. Điều quan trọng là phải hiểu rằng, một trong ba điểm khác biệt chính của API ảnh hưởng đến việc chuyển các plugin Express là phương thức res.redirect trong Restify yêu cầu bạn phải vượt qua next (hoặc an InternalError is thrown). Cá nhân tôi đã chuyển một số module từ Express để Restify và sự khác biệt API chính lúc đầu là (trong Restify):

  • server.use chỉ dành cho con đường & HTTP-method-agnostic middleware
  • res.redirect đòi hỏi bạn phải vượt qua next
  • Một số thành viên hoặc giao diện Yêu cầu là các phương thức thay vì giá trị, chẳng hạn như req.path. req.path là một bí danh của req.getPath trong Restify

Tôi KHÔNG nói rằng dưới-the-hood họ là tương tự, nhưng mà ba điều trên là những trở ngại chính đối với porting qua plugin Express. Dưới mui xe, Restify có nhiều ưu điểm so với Express trong kinh nghiệm của tôi khi sử dụng nó trong cả các ứng dụng doanh nghiệp lớn và các dự án cá nhân.

+0

Chấp nhận điều này càng phù hợp với mục đích sử dụng Restify – Routhinator

+0

Vì lý do nào đó, với Restity 4.3.0, tôi phải đưa vào giao thức 'https: // www.foo.com' nếu không nó sẽ chỉ chuyển hướng đường dẫn. – occasl

+0

@occasl cảm ơn, tôi sẽ cập nhật –

11

Bạn cần phải sử dụng mã trạng thái chuyển hướng 302.

res.send(302); hoặc res.send(302, 'your response');

+0

Hoạt động hoàn hảo. Cảm ơn bạn! – Routhinator