Res.end () ve res.send () arasındaki fark nedir?


141

Ben yeni başlayan biriyim Express.jsve şu iki anahtar kelime ile karıştırıyorum: res.end()ve res.send().

Aynı mı yoksa farklı mı?


1
Ben düşünüyorum res.endolarak nerede düz düğüm tarafından kullanılan res.sendekspres framwork tarafından kullanılır
Muhammed Umer Idreesi

Yanıtlar:


130

res.send()HTTP yanıtını gönderir. Sözdizimi,

res.send([body])

Body parametresi bir Buffer nesnesi, bir String, bir nesne veya Array olabilir. Örneğin:

res.send(new Buffer('whoop'));
res.send({ some: 'json' });
res.send('<p>some html</p>');
res.status(404).send('Sorry, we cannot find that!');
res.status(500).send({ error: 'something blew up' });

Bkz bu daha fazla bilgi için.

res.end()yanıt verme sürecini sonlandıracaktır. Bu yöntem, gerçekten düğüm çekirdek, özellikle de gelen response.end()metodu http.ServerResponse. Herhangi bir veri olmadan yanıtı hızla bitirmek için kullanılır. Örneğin:

res.end();
res.status(404).end();

Daha fazla bilgi için bunu okuyun .


69
Ancak res.end aslında res.send gibi davranabilir, böylece yanıt gövdesi olarak eklemek için bir dize argümanı iletebilirsiniz. Bunun da ötesinde, res.send yanıtı da sonlandırır. Peki işlevsel olarak nasıl farklılar?
saltthehash

31
@ psytech140 Jmar77 burada güzel bir yanıt verdi : "res.send () öğesine bir dize iletirseniz, otomatik olarak html. res.end () 'nin İçerik Türü türünü varsayar, ancak yanıt akışını içerdiğinden, İçerik Türü için hiçbir varsayım yapılmaz. "
abagh0703

Bunu asla kullanmadım çünkü hiç kullanmadım expressama başlıktan düşündüm - bir şey gönderir, biri bir şeyi bitirir .... 'twas doğru.
Darren Bartrup-Cook

Ama ya sadece res.send()hiçbir şey kullanmazsan . Bu gibi res.end()mi davranıyor ?
CMCDragonkai


109

Ben arasında bazı temel farklar hakkında biraz daha vurgu yapmak istiyorum res.end()& res.send()yanıt başlıkları açısından ve neden önemli olduklarını ile.

1. res.send (), çıktınızın yapısını kontrol eder ve başlık bilgisini buna göre ayarlar.


    app.get('/',(req,res)=>{
       res.send('<b>hello</b>');
    });

resim açıklamasını buraya girin


     app.get('/',(req,res)=>{
         res.send({msg:'hello'});
     });

resim açıklamasını buraya girin

Res.end () ile yalnızca metinle yanıt verebilirsiniz ve " İçerik Türü " ayarlanmaz

      app.get('/',(req,res)=>{
           res.end('<b>hello</b>');
      }); 

resim açıklamasını buraya girin

2. res.send (), yanıt başlığında "ETag" özelliğini ayarlayacaktır

      app.get('/',(req,res)=>{
            res.send('<b>hello</b>');
      });

resim açıklamasını buraya girin

Tag Bu etiket neden önemlidir?
ETag HTTP yanıt başlığı, bir kaynağın belirli bir sürümü için tanımlayıcıdır. Bir web sunucusunun içerik değişmediyse tam yanıt göndermesi gerekmediğinden önbelleklerin daha verimli olmasını sağlar ve bant genişliğinden tasarruf sağlar.

res.end() bu başlık niteliğini ayarlamayacak


4
Bu benim görüşüme göre cevap kabul edilecektir ... İçeriği olan / olmayan yanıtı sona erdirme tartışması yerine, iş gününüzü mahvedebilecek gerçek farklılıklara daha fazla vurgu yapılır ...
Tomas

13

res.send () 'in yaptığı şey, res.write , res.setHeaders ve res.end' i uygulamaktır .
ne veri gönderdiğinizi kontrol eder ve doğru başlıkları ayarlar,

daha sonra verileri res.write ile aktarır ve sonunda isteğin sonunu ayarlamak için res.end kullanır.

manuel olarak yapmak isteyebileceğiniz bazı durumlar vardır, örneğin dosya veya büyük bir veri kümesi istiyorsanız, bu durumda başlıkları kendiniz ayarlayıp res.write komutunu kullanmak istersiniz. akar.


0

resOutgoingMessage'dan uzanan bir HttpResponse nesnesidir. HTTP yanıtı göndermek ve bağlantıyı kapatmak için OutgoingMessage tarafından uygulanan res.sendçağrılar res.end. Biz kodunu görmek burada

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.