2013-07-21 3 views
0

я следующее ...Как написать ответ от HTTP Client Node.js

var request = require('request'); 

exports.list = function(req, res){ 
    res.send("Listing"); 
}; 
exports.get = function(req, res){ 
    request.get("<URL>", function (err, res, body) { 
    if (!err) { 
     res.send(body,"utf8"); 
    } 
    }); 
}; 

Это терпит неудачу с следующий ....

TypeError: Object #<IncomingMessage> has no method 'send' 

Как это сделать?

UPDATE пытались использовать писать вместо отправки, но ...

/Users/me/Development/htp/routes/property.js:9 
    res.setHeader('Content-Type', 'text/html'); 
    ^
TypeError: Object #<IncomingMessage> has no method 'setHeader' 

писать также на консоль вместо этого работает нормально.

+0

Нужна дополнительная информация по вашему запросу, чтобы ответить ..... Структура использования Express Express может быть возможным решением ..... это делает работу намного проще – Devrath

+0

Для чего вы используете эту функцию? 'res.send' - это выраженный API. Вы используете это? – user568109

+0

Я использую экспресс, я попробую использовать команды для не-экспресс, как указано ниже, и посмотреть, работает ли это. – Jackie

ответ

1

Проблема была в области переменных, мой ответ был тем же именем, что и объект ответа, который я получил в своем обратном вызове. Изменение этого порядка (resp vs res) заставило его работать.

exports.get = function(req, res){ 
    request.get("<url>", function (err, resp, body) { 
    if (!err) { 
     res.send(body); 
    } 
    }); 
}; 
+0

вы используете экспресс? объект ответа, переданный функции обратного вызова 'http.createServer()', не имеет метода 'req.send()', afaik 'req.send' добавляется Express. поздравляем вас с решением вашей проблемы! – Plato

+0

Как указано в других комментариях, я использую экспресс. Спасибо, что пытались помочь! – Jackie

0

Что вы пытаетесь сделать, это сделать Request> Response server. Но вы используете модуль Request, который позволяет получать материал, а не отвечать.

Что вам нужно, это http или лучше получить express.js и использовать его, поскольку он прямолинейный и хорошо популярный веб-фреймворк именно для вас.

+0

Я использую экспресс .... – Jackie

+0

Вы читали руководство? http://expressjs.com/guide.html – moka

+0

См. мой ответ, что он не имеет ничего общего с каркасом, я очень знаком с выражением и использовал его для нескольких проектов. Проблема заключалась в том, что переменные прячутся друг от друга. – Jackie

0

Я не знал, что OP использует Express. Вы столкнетесь с подобной ошибкой, если попытаетесь использовать req.send с ванильным HTTP-модулем вместо Express.

var http = require('http');  
function requestHandler(req, res){ 
    //res.send(200, '<html></html>'); // not a valid method without express 
    res.setHeader('Content-Type', 'text/html'); 
    res.writeHead(200); 
    res.end('<html><body>foo bar</body></html>'); 
}; 
http.createServer(handler).listen(3000); 
+0

Вам следует подробнее рассказать о своем ответе. – Omar

+0

Это не сработало Я скоро буду обновлять с ошибкой ... – Jackie

+0

обновлен с лучшим контекстом – Plato