2016-03-29 19 views
1

değiştirmek ve mevcut ben API sunucu REST benim Uygulama isteği iletmek için Express ve Talebi (https://github.com/request/request) kullanılan mevcut benim kod aşağıda gösterilen:nasıl NodeJS için biraz yeniyim NodeJS Talebi Akış yanıtını

app.use('/rest/*', function(req, res) { 
    req.pipe(request('http://ipaddress/api')).pipe(res); 
}); 

Bu kod, REST API sunucusu Tamam olduğunda çalışır, ancak geri kalan api sunucusu düşerse, uygulama akışı başarısız olur ve hata benim uygulama tarafından yakalanmadığı için nodejs uygulamam da azalır. Sadece hatayı log ve benim NodeJS uygulama çökmesini önleyebilir

app.use('/rest/*', function(req, res) { 
    req.pipe(request('http://ipaddress/api').on('error', function(err) { 
     console.log(err); 
    })).pipe(res); 
}); 

böyle, bu dere hatayı işlemek için bir yol sağlar İsteği github sayfasını kontrol, ama hata yüzden oluştuğunda ben tepkisini değiştirmek istiyorum o değiştirilen tepki, örneğin nihai birine dağıtılması hedefleniyor, ne pseudocode yapmak istiyorum:

app.use('/rest/*', function(req, res) { 
    req.pipe(request('http://ipaddress/api').on('error', function(err) { 
     console.log(err); 
     // what I want to do in pseudocode 
     response.statusCode = 500; 
     response.json = { 
      reason: err.errno 
     }; 
    })).pipe(res); 
}); 

benim sorunları çözmek için herhangi bir yolu var mı? Herhangi bir fikir için teşekkürler!

+1

gibi işliyor. Bunun yerine yapmanız gereken, çevrimiçi olup olmadığını kontrol etmek için düğüm sunucusundan API sunucusuna HEAD isteği yapmaktır, daha sonra devam ederse ve API isteğini istemciye iletirse. Aksi takdirde, istemciye istediğiniz cevabı gönderebilirsiniz. –

cevap

0

Yanıtlanmadı, ancak yanıtı işlemek için hatayı orta yazılıma geri gönderebilir misiniz? başlıklar zaten hata olasılığı yüksektir zaman gönderilen beri

app.use('/rest/*', function(req, res, next) { 
    req.pipe(request('http://ipaddress/api').on('error', function(err) { 
     return next(err) 
    })).pipe(res); 
}); 

, sadece tek bir istek ile mümkün olmayabilir bu yüzden

// Exception handling 
app.use(function (error, req, res, next) { 
    console.log(error); 
    res.status(500).send(JSON.stringify(error));  
    next(); 
}); 
+0

Çok teşekkürler, işe yarıyor! Tek sorum, Except taşıma yönteminde kullanılan next() yöntemidir, next() yöntem çağrısını kaldırmayı denedim, ayrıca çalışır. Bana neden burada() kullandığını söyler misin? – Bill

+0

Sadece gerçekleştirmek için başka (middleware) eylemleriniz varsa, istisna işleminde gerçekten kullanılır - örneğin, – ossie

+0

için bir kayıt işlevine sahip olabilirsiniz Çok teşekkürler! – Bill