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>\n\t<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.
response.send(msg)
is equal to 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.