инспектор узлов не может работать без указания порта

Я новичок в узле. Я пытаюсь создать HTTP-сервер, который получает только запросы POST и преобразует входящие символы тела POST в верхний регистр и возвращает их клиенту. И мой сервер слушает порт, указанный первым аргументом вашей программы.

мой код:

это следующий мой код:

var map = require('through2-map');
var http = require('http');

http.createServer(function (req, res) {
    debugger;
  console.log("typeof req");
  if (req.method === "POST") {
    req.pipe(map(function (chunk) {
      return chunk.toString().toUpperCase();
    })).pipe(res);
  }
}).listen(process.argv[2]);

эта программа ожидает аргумент порта из командной строки.

Без отладки:

Я запускаю сервер: $ node http_uppercaserer.js 8080

И проверьте это: $ curl 127.0.0.1:8080 -X POST -d "asd", оно вернет мне ASD

это означает, что работает нормально.

Отладка с инспектором:

Но когда я использую node inspector для отладки моей программы: $ node-debug http_uppercaserer.js 8080 и ее тестирования: $ curl 127.0.0.1:8080 -X POST -d "asd",

Это возвращает меня :Cannot POST /

Странный

После запуска node-debug http_uppercaserer.js 8080, разрыва по умолчанию в первой строке, когда я нажимаю «Возобновить», терминал выдает мне ошибку:

$ node-debug http_uppercaserer.js 8080
Node Inspector is now available from http://localhost:8080/debug?port=5858
Debugging `http_uppercaserer.js`

debugger listening on port 5858

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EADDRINUSE
    at errnoException (net.js:904:11)
    at Server._listen2 (net.js:1042:14)
    at listen (net.js:1064:10)
    at Server.listen (net.js:1138:5)
    at Object.<anonymous> (/Users/tangmonk/Documents/learn/nodejs_study/async_and_http/http_uppercaserer.js:12:4)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain [as _onTimeout] (module.js:497:10)

Но когда я указываю порт $ node-debug -p 9000 http_uppercaserer.js 8080, он работает нормально, почему?


person user3160143    schedule 17.06.2014    source источник


Ответы (1)


node-debug по умолчанию добавит опцию --debug-brk, которая прервет выполнение кода в первой строке. Вам бы его возобновить. Итак, после выполнения:

node-debug -p 8082 e.js 8081

Откройте ссылку в chrome и возобновите выполнение перед запуском curl. Или вы можете сделать это так:

node-inspector  --web-port=8082
node --debug=5858 /datastorage/rupayan/e.js 8081

то вы можете нормально сделать

curl 127.0.0.1:8081 -X POST -d "asd"

PS: извините за путаницу, я не могу запустить мой инспектор узлов по умолчанию 8080. Так что не нужно указывать 8082, если вы можете использовать порт 8080.

Странный ответ

Это связано с тем, что сам узел-инспектор размещает сервер, и адрес по умолчанию для него — 8080. Таким образом, ни ваше приложение, ни инспектор узлов не могут его использовать.

person user568109    schedule 17.06.2014
comment
спасибо за ваш ответ, вы неправильно поняли, моя программа ожидает командную строку формы аргумента порта вместо изменения порта node_debug's - person user3160143; 17.06.2014
comment
Спасибо, ваше решение работает! но я странный, я обновляю свой вопрос (раздел weird), вы можете мне снова помочь? - person user3160143; 17.06.2014