Я написал небольшой API, который использует фреймворк Node js "restify". Этот API получает запрос (фактически что-нибудь после "/" ), а затем отправляет этот запрос другому серверу. Получите ответ от сервера и передайте ответ обратно в исходный источник запроса. Для этого API я использую как восстанавливать сервер, так и клиент.
Ниже приведен код 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.send
от Node.js. Потому что с помощью response.write
я могу установить заголовок и написать в нем, но при использовании response.send
ничего не могу сделать с заголовками. Когда я использую response.send
с setHeader()
или writeHeader()
, я получаю эту ошибку:
http.js:691 throw new Error('Can\'t set headers after they are sent.'); ^ Error: Can't set headers after they are sent.
Есть и другое. С response.send()
я получаю полный вывод HTML на экране, например:
<!DOCTYPE html>\n<html>\n\t<head></head></html> ..... "bla bla bla"
Но с response.write
я не получаю html на экране, а только текст "bla bla bla"
.
Было бы здорово, если кто-то сможет объяснить мне различия.