Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 连接到HTTP服务器_Javascript_Node.js_Express_Read Eval Print Loop - Fatal编程技术网

Javascript 连接到HTTP服务器

Javascript 连接到HTTP服务器,javascript,node.js,express,read-eval-print-loop,Javascript,Node.js,Express,Read Eval Print Loop,我正在尝试使用roder中的net.connect连接到一个节点http服务器套接字(expressJs),以将该套接字传递给我的repl,从而能够基本上连接到我的http服务器并启动命令 在尝试此操作时,我在启动repl的第二个步骤时就出现了错误 以下是repl的代码: const args = process.argv.slice(2); if (args.length < 1) { process.exit(1); } const url = args[0]; const [h

我正在尝试使用roder中的net.connect连接到一个节点http服务器套接字(expressJs),以将该套接字传递给我的repl,从而能够基本上连接到我的http服务器并启动命令

在尝试此操作时,我在启动repl的第二个步骤时就出现了错误

以下是repl的代码:

const args = process.argv.slice(2);
if (args.length < 1) {
  process.exit(1);
}

const url = args[0];
const [host, port] = url.split(':');

//this will get the url to connect to
const socket = net.connect(parseInt(port), host);

process.stdin.pipe(socket);
socket.pipe(process.stdout);

Console.start({
  expose: { container, Metric:metricsObject},
  socket:socket
});
正在运行的http服务器:

const http = this.express
    .listen(this.config.web.port, () => {
      const { port } = http.address();
      this.logger.info(`[p ${process.pid}] Listening at port ${port}`);
      resolve();
    });

this.express
只是express的一个实例:
this.express=express()

看起来您正试图通过类似
URL的URL连接到http(或https?)服务器http://mine.example.com:3000/path/item

net.connect(parseInt('3000/path/item'), 'http://mine.example.com');
它不起作用的原因有很多

  • 除非您是http协议方面相当出色的程序员专家,否则您不应该使用
    net.connect
    与http服务器通信。试着改用

  • 传递给net.connect的主机名应该是原始机器名,如
    'mine.example.com'
    ,前面不带协议说明符

  • 港口,类似的

  • 对不起,我不明白你想用stdin和stdout做什么。但是您的
    套接字
    在其连接操作完成并且您收到一个事件通知之前,不会准备好使用

    您可以使用旧的
    telnet
    程序连接到http服务器。它允许您在服务器上键入内容,然后显示返回的内容。对你来说,你会的

     telnet localhost 3000  # from shell your command line
    
    然后,服务器连接并坐在那里等待。你打字

     GET / HTTPS/1.0
    
    然后是两个
    s。然后,如果您输入
    http://localhost:3000
    插入浏览器位置行。然后关闭连接

    我不确定http协议操作如何适合您的REPL


    您在中提到的示例没有连接到http服务器,而是连接到tcp服务器。Http服务器(包括所有node/express服务器)是tcp服务器的一个子种,但它们将Http协议分层到tcp协议上。http协议不适合REPL的来回对话方式。

    看起来您正试图通过类似
    URL的URL连接到http(或https?)服务器http://mine.example.com:3000/path/item

    net.connect(parseInt('3000/path/item'), 'http://mine.example.com');
    
    它不起作用的原因有很多

  • 除非您是http协议方面相当出色的程序员专家,否则您不应该使用
    net.connect
    与http服务器通信。试着改用

  • 传递给net.connect的主机名应该是原始机器名,如
    'mine.example.com'
    ,前面不带协议说明符

  • 港口,类似的

  • 对不起,我不明白你想用stdin和stdout做什么。但是您的
    套接字
    在其连接操作完成并且您收到一个事件通知之前,不会准备好使用

    您可以使用旧的
    telnet
    程序连接到http服务器。它允许您在服务器上键入内容,然后显示返回的内容。对你来说,你会的

     telnet localhost 3000  # from shell your command line
    
    然后,服务器连接并坐在那里等待。你打字

     GET / HTTPS/1.0
    
    然后是两个
    s。然后,如果您输入
    http://localhost:3000
    插入浏览器位置行。然后关闭连接

    我不确定http协议操作如何适合您的REPL


    您在中提到的示例没有连接到http服务器,而是连接到tcp服务器。Http服务器(包括所有node/express服务器)是tcp服务器的一个子种,但它们将Http协议分层到tcp协议上。http协议不适用于REPL的来回对话方式。

    我在net.connect中使用的主机和端口正好是:“localhost”和“3000”,它们正是我的web服务器运行的主机和端口。通过stdin和stdout,我试图将我正在运行的repl进程的stdin链接到我的web服务器,并将服务器的stdout链接到我的repl进程。我只是尝试将一个repl连接到一个正在运行的节点http服务器。我确实有点遵循这一点:因此,我从http req.socket获得的套接字不适合我尝试使用的tcp repl。如何从http套接字中取出tcp套接字,因为后者只是第一层之上的一层。我的
    telnet
    示例演示了如何将http连接假装为普通tcp连接。但是,尝试在http连接中将REPL挂接到tcp套接字就像尝试与软饮料分发器进行对话一样。它所知道的只是根据请求提供罐装百事可乐。它真的很擅长大规模地这样做,但对于其他任何事情都毫无价值。您的预期项目包含类别错误。我在net.connect中使用的主机和端口正好是:“localhost”和“3000”,这两个主机和端口正是我的web服务器运行的主机和端口。通过stdin和stdout,我试图将我正在运行的repl进程的stdin链接到我的web服务器,并将服务器的stdout链接到我的repl进程。我只是尝试将一个repl连接到一个正在运行的节点http服务器。我确实有点遵循这一点:因此,我从http req.socket获得的套接字不适合我尝试使用的tcp repl。如何从http套接字中取出tcp套接字,因为后者只是第一层之上的一层。我的
    telnet
    示例演示了如何将http连接假装为普通tcp连接。但是,尝试在http连接中将REPL挂接到tcp套接字就像尝试与软饮料分发器进行对话一样。它所知道的只是根据请求提供罐装百事可乐。它真的很擅长大规模地这样做,但对于其他任何事情都毫无价值。您的预期项目包含类别错误。