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.