programing

Node js에서 response.send와 response.write의 차이점

copyandpastes 2021. 1. 17. 12:30
반응형

Node js에서 response.send와 response.write의 차이점


Node js "restify"프레임 워크를 사용하는 작은 API를 작성했습니다. 이 API는 요청 (실제로 "/"뒤에 오는 모든 것)을 수신 한 다음 해당 요청을 다른 서버로 보냅니다. 서버에서 응답을 받고 원래 요청 소스로 응답을 전달합니다. 이 API의 경우 restify 서버와 클라이언트를 모두 사용하고 있습니다.

아래는 더 나은 이해를위한 API 코드입니다.

var apiServer = require('apiServer');
apiServer.start();

var restify = require('restify');
var assert = require('assert');

function onRequest(request, response, next)
{
    var client = restify.createStringClient({ 
        url: 'http://example.com'
    });

    client.get('/' + request.params[0], function(err, req, res, data) {
        assert.ifError(err);

        response.setHeader('Content-Type', 'text/html');
        response.writeHead(res.statusCode);
        response.write(data);
        response.end();
    });
    next();
}

function start()
{
    var server = restify.createServer();
    server.get(/^\/(.*)/, onRequest);
    server.listen(8888);

    console.log("Server has started.");
}

exports.start = start;

지금은 차이 알아야 response.write하고 response.sendNode.js.의를 함께 때문에 response.write내가 헤더와 거기에 쓰기를 설정할 수 있지만, 내가 사용하는 경우 헤더와 함께 아무것도 할 수 없습니다 response.send. 언제 사용 response.send으로 setHeader()또는 writeHeader()나는이 오류가 발생합니다 :

http.js : 691
    throw new Error ( '헤더를 보낸 후에는 설정할 수 없습니다.');
          ^
    오류 : 헤더를 보낸 후에는 설정할 수 없습니다.

또 다른 것이 있습니다. 다음과 response.send()같이 화면에 완전한 HTML 출력을 얻습니다.

<!DOCTYPE html>\n<html>\n\t<head></head></html> ..... "bla bla bla"

그러나 response.write화면에 html이 표시되지 않고 텍스트 만 표시됩니다 "bla bla bla".

누군가 나에게 차이점을 설명해 줄 수 있다면 좋을 것입니다.


나는 문서response.send() 에서 찾을 수 없지만 응답을 채우고 보낼 것이라고 가정 하므로 한 번만 호출 할 수 있지만 응답을 작성하지만 사용하여 보내야합니다..send().write()response.end()

이는 .write()응답이 아직 전송되지 않았기 때문에를 사용하여 헤더를 편집 할 수 있음을 의미합니다 .

편집 :

response.send()restify Response API 래퍼의 일부입니다.


response.send(msg) 와 동등하다 response.write(msg);response.end();

Which means, send can only be called once, write can be called many times, but you must call end yourself.


res.send() is part of Express.js instead of pure Node.js.

Just an side observation. My app sometimes send back a very large Json object ( HighChart object that contains over 100k points). With res.send() sometimes it hangs and choke up the server, whereas res.write() and res.end() handle it just fine.

I also noticed a memory spike when res.send() is invoked.


I was trying to send huge text data(295mb) over http using res.send(data) and res.write(data). I noticed that res.send(data) is slower than res.write(data). I observed following things.

res.send(data): it can be called only once and it sends data in chunk of some buffer size to client and then again comes back and sends another chunk of buffer size so there is a lot of back and forth http communication.

res.write(data): It can be called multiple times followed by res.end() and It creates buffer size based on whole data and sends over http so it would be faster in case of huge amount of data.

ReferenceURL : https://stackoverflow.com/questions/21749590/difference-between-response-send-and-response-write-in-node-js

반응형