Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
193
rated 0 times [  197] [ 4]  / answers: 1 / hits: 104307  / 11 Years ago, thu, february 13, 2014, 12:00:00

I have written a small API which uses the Node js restify framework. This API receives a request (actually anything after /) and then send that request to another server. Get the response back from server and passes the response back to original source of request. For this API I am using both restify server and client.



Below is that API code for better understanding.



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;


Now I need to know the difference between response.write and response.send of Node.js. Because with response.write I can set header and write in it but it is not possible to do anything with headers when I use response.send. When I use response.send with setHeader() or writeHeader() I get this error:



http.js:691
throw new Error('Can't set headers after they are sent.');
^
Error: Can't set headers after they are sent.


There is also another thing. With response.send() I get the complete HTML output on the screen like:



<!DOCTYPE html>n<html>nt<head></head></html> ..... bla bla bla


But with response.write I do not get the html on screen but only the text bla bla bla.



It would be great if someone can explain me the differences.


More From » node.js

 Answers
10

I can't find response.send() in the docs, but I assume .send() will fill in and send the response so can only be called once, whereas .write() will just write the response, but you have to send it using response.end()



This means you can edit the headers using .write() because the response has not been sent yet.



EDIT :



response.send() is part of the restify Response API wrapper


[#72547] Wednesday, February 12, 2014, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
josuea

Total Points: 609
Total Questions: 121
Total Answers: 104

Location: South Georgia
Member since Fri, Nov 13, 2020
4 Years ago
josuea questions
;