2016-06-02 33 views
6

I aldığı, bir açısal uygulama, bu JSONP uç noktasını kullanır ve bu belirli hata ile karşılaştığındaExpress.js yanıt durum kodu

return res.status(400).jsonp({ 
    message: 'Parsing failed.', 
    code: '123' 
}); 

yanıt istiyorum bir ORTALAMA-yığın arka uç sahip Bir 400 ama onun yükü olmadan. Durumu 200/300 olarak değiştirdiğimde, 400/500 ile iyi değil.

Diğer yollarda (POST) 4 ** durum kodu ve yükü sorunsuz olarak yanıtlayabilirim.

return res.status(400).send({ 
    message: 'Codes do not match.', 
    code: '234' 
}); 

Ne düşündüğüme dair bir fikrim var mı?

+0

Express varsayılan JSONP geri çağrısını JSON_CALLBACK öğesine yapılandırdınız mı? – Nivesh

+1

@ Yanlış anlaşıldıysam beni hatırla, ama durum böyle olmazsa, res.jsonp ({code: '234'}) 'veya' res.status (300) .jsonp ({code: '234') }) 'ya çalışmıyor, değil mi? – Tom

+1

@Hesap geri arama ayarı doğru değilse, aynı zamanda 200/300 yanıtları için de başarısız olur ... – robertklep

cevap

2

Bu bir tarayıcı-şey gibi görünüyor: uzak bir komut istendiğinde (JSONP isteklerinde olduğu gibi) ve yanıt 400 (veya daha yüksek) bir HTTP durumu döndürdüğünde, yine de döndürülebilen herhangi bir kod Cevap gövdesinde değerlendirilmez (bu aslında mükemmel bir anlam ifade eder).

Açısal, yalnızca yanıtın gönderildiğini ve bunun bir hata durumu olduğunu bilecektir, ancak geri arama çağrısı yapılmadığından geri arama verilerinize aktarılacak veri yok.

<script> 
function foo(data) { alert('foo') } 
</script> 
<script src="/endpoint?callback=foo"></script> 

Ve aşağıdaki Ekspres işleyicisi:

Ben tek başına bir HTML sayfası test

app.get('/endpoint', (req, res) => { 
    return res.status(400).jsonp({ hello : 'world' }); 
}); 

A 400 bir durum uyarısı tetiklemez, 200 durum yok. İşleyici, düz JS (<script src=...> ile yüklenen bir basit .js dosya gibi davranan) döndürdüğünde de çalışmaz.

JSONP istekleri için 200 yanıt vermeli ve başka herhangi bir şekilde (yanıt nesnesinde error özelliğinin ayarlanması gibi) hataları iletmelisiniz.

+0

gerçekten, bunu da kontrol edeyim. – Nivesh

+1

Teşekkürler robert, daha önce anladığım şeyin teyidi için: işe yaramayacak! :) Garip görünüyor olsa da, çalışmaya göre çalışıyor olmalı dokümanlar: http://expressjs.com/en/api.html#res.jsonp. Ve res.jsonp (400, {}) kullanılırken şunu görüyorum: log'larda bu geçişi görüyorum: 'express kullanım dışı res.jsonp (durum, obj): res.status (status) .jsonp (obj) yerine ' – Tom

+0

@ Tom hmm evet, belgelerin bu öneriyi yaptığı garip. Hiç merak ettiler mi: P – robertklep

İlgili konular