Ответ Node.js не определен при подключении через HTTP-клиент

Я новичок в node.js и начал с создания небольшого веб-приложения, которое работает на порту 5000. Когда я попробовал этот URL-адрес, который работает в моем локальном (через браузер или через curl), все работает нормально, и я получаю обратно ответ. Но когда я попытался соединить его с http-клиентом во время выполнения "BDD using vows", тест прервался, и в результате появилось сообщение

✗ 

  /GET
    ✗ should respond with 404
    ***TypeError: Cannot read property 'status' of undefined***
    at ClientRequest.<anonymous> (/home/sunil/work/nodal_programs/subscription-engine-processor/sample-test.js:13:23)
    at runTest (/home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows.js:132:26)
    at EventEmitter.<anonymous> (/home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows.js:85:17)
    at EventEmitter.<anonymous> (events.js:67:17)
    at EventEmitter.emit (/home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows.js:236:24)
    at /home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows/context.js:31:52
    at ClientRequest.<anonymous> (/home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows/context.js:46:29)
    at ClientRequest.<anonymous> (events.js:67:17)
    at ClientRequest.emit (/home/sunil/work/nodal_programs/subscription-engine-processor/node_modules/vows/lib/vows.js:236:24)
    at HTTPParser.onIncoming (http.js:1225:11)
✗ Errored » 1 errored (0.012s)

Ответ здесь не определен.

body = "Not found"; 
response.writeHead(404, {'Content-Type': 'text/plain', 'Content-Length': body.length});     
response.end(body);

Вот как я отвечаю в приложении. Я установил тип содержимого заголовков и длину содержимого. Может ли кто-нибудь помочь мне, в чем может быть проблема?

Обет, который я написал, таков.

var http = require('http'),
    vows = require('vows'),
    assert = require('assert');

vows.describe("notification").addBatch({
  "/GET": {
    topic: function() {
    http.get({host: 'localhost', port: 1337, path: '/', method: 'GET'}, this.callback) ; 
    },
    'should respond with 404': function(e,res) {
      assert.equal(res.status, 404);
    }
  }
}).run(); 

2 ответа

Решение

Попробуйте изменить

'should respond with 404': function(e,res) {
  assert.equal(res.status, 404);
}

в

'should respond with 404': function(res) {
  assert.equal(res.status, 404);
}

Согласно HTTP-документам Node.js, http.request (и поэтому http.get) обратные вызовы не принимают err аргумент.

Я внес изменение в код и попытался с ответом в качестве первого параметра обратного вызова и ошибкой в ​​качестве второго. Это сработало для меня.

'should respond with 404': function(res,e) {
   assert.equal(res.status, 404);
}

Однако res как единственный параметр все еще вызывает ошибку, как я упоминал выше.
Спасибо за поддержку.

Другие вопросы по тегам