node.js的简单服务器测试不起作用,没有输出[重复]

Posted

技术标签:

【中文标题】node.js的简单服务器测试不起作用,没有输出[重复]【英文标题】:Simple server test for node.js not working, no output [duplicate] 【发布时间】: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");

【问题讨论】:

【参考方案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 和其他明显未使用的端口等端口,那么它可能不是节点或您的代码的问题。可能是网络问题?您的路由器正在使用端口?

以上是关于node.js的简单服务器测试不起作用,没有输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Node.js WebStorm 远程调试不起作用(没有 SSH 隧道)

使用 nodemailer 通过 Node.js 发送电子邮件不起作用

通过 _id 进行简单查询,mongoose 和 node.js 不起作用

***等待在最新的 Node.js 中不起作用

Node.js 远程调试不起作用

Node js csrf令牌保护不起作用