【问题标题】:Simple server test for node.js not working, no output [duplicate]node.js的简单服务器测试不起作用,没有输出[重复]
【发布时间】:2019-07-15 23:37:42
【问题描述】:

我是 node.js 的新手,我想知道一般测试以下类型代码的最佳方法。现在,我将这一切作为 netbeans node.js 项目中的一个文件来完成。我没有得到任何输出,输出应该是“HELLO SERVER”。

它通常编译没有错误,但没有输出,其他时候它说

"throw er; // 未处理的 'error' 事件 Error: listen EADDRINUSE :::8000"

我已经知道这个拒绝意味着什么,我认为当我点击两次运行时它就是这样做的,因为那个端口被第一次运行占用了。

我已经尝试了多个端口,它可以工作但没有输出......

我应该以其他方式对此进行测试吗?为什么没有输出?输出应该是“HELLO SERVER” 谢谢。

var http = require("http");
http.createServer(function (request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    request.on("data", function (chunk) {
        response.write(chunk.toString().toUpperCase());
    });
    request.on("end", function () {
        response.end();
    });
}).listen(8000);

var http = require("http");
var request = http.request({
    hostname: "localhost",
    port: 8000,
    method: "POST"
}, function (response) {
    response.on("data", function (chunk) {
        process.stdout.write(chunk.toString());
    });
});
request.end("Hello Server");

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    这意味着您的端口8000 已被另一个进程使用。该进程可能是您的服务器的旧实例仍在运行(未正确退出)仍在占用端口。

    尝试使用端口8000 查找进程并杀死它

    在 Linux 上

    fuser -k 8000/tcp
    

    在 Windows 上

    netstat -ano | findstr :8000
    // Find the value of the PID (last column to the right)
    taskkill /PID {pid_value} /F
    

    【讨论】:

      【解决方案2】:

      我测试了您的代码,服务器启动得非常好。 "throw er; // Unhandled 'error' event Error: listen EADDRINUSE :::8000" 表示您启动服务器的端口已经有服务器或其他进程在其上运行。更改端口号或停止服务

      var http = require("http");
      http.createServer(function(request, response) {
        response.writeHead(200, {
          "Content-Type": "text/plain"
        });
        request.on("data", function(chunk) {
          response.write(chunk.toString().toUpperCase());
        });
        request.on("end", function() {
          response.end();
        });
      }).listen(3000);
      
      var http = require("http");
      var request = http.request({
        hostname: "localhost",
        port: 3000,
        method: "POST"
      }, function(response) {
        response.on("data", function(chunk) {
          process.stdout.write(chunk.toString());
        });
      });
      request.end("Hello Server");
      

      【讨论】:

      • 在您发布的代码中,它侦听的端口与请求的端口不同,对吗?我已经查看了拒绝的含义,有时它在没有拒绝的情况下运行,但只是没有像现在这样显示输出。我还将端口切换到 0,使其查找任何打开的端口并且不显示输出文本....这个问题不仅仅是询问拒绝意味着什么,而是询问一般测试此类事情的最佳方法为什么没有输出...
      • @evanr123 谢谢,错过了。如果这是您的问题,您应该编辑它或重新要求它指定您理解错误并想知道如何测试它。尝试重新启动您的机器或从终端清除所有端口,看看您是否仍然收到错误。
      • 我会尝试重新启动。所以当你运行它时,你得到的输出是“HELLO SERVER”?还是刚开始时没有输出....
      • 是的,我得到了输出HELLO SERVER,一切都按预期工作。您的代码很好,该端口正被另一个进程使用。
      • 只想说,如果您在重新启动后仍然遇到问题并且您尝试使用 8001、8002 和其他明显未使用的端口等端口,那么它可能不是节点或您的代码的问题。可能是网络问题?您的路由器正在使用端口?
      猜你喜欢
      • 2015-05-26
      • 2019-05-03
      • 2014-10-17
      • 2015-10-24
      • 2017-02-09
      • 1970-01-01
      • 2011-08-30
      相关资源
      最近更新 更多