如果在NodeJS中创建服务器时删除res.end()会发生什么?

时间:2017-12-13 15:55:44

标签: javascript node.js http

我正在学习使用NodeJS创建一个简单的服务器。这是我从材料中提取的代码:

var http = require('http');
var server = http.createServer(function(req, res){
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end();
});

server.listen(3000);

此示例中res.end()做了什么?我每次创建服务器时都必须使用res.end()吗?如果我从上面的代码中删除res.end(),会发生什么?

(我已经尝试从代码中删除res.end(),运行它,我看到的是浏览器不断显示任何内容(即使是白色的空白页面)也不断加载。我不知道是什么发生在后面)

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

  

res.send()

向客户发送回复。如果您没有将回复发送回客户端,您将无法在浏览器中收到任何回复答案。

您必须从指定的每条路线向客户发送回复。在您的示例中,当您调用服务器的根地址时,将传递您传递给createServer()方法的函数。如果您在本地运行此操作,则为localhost:3000

答案 1 :(得分:1)

首先让我们逐行破解您的代码

  

var http = require(' http');

这是从构建库中的node.js导入http库。哪些可用于执行http相关任务。创建服务器就是其中之一。

var server = http.createServer(fn).
server.listen(3000);

server.listen(3000)将启动一个http服务器,该服务器将监听来自http的{​​{1}}个请求。每次在浏览器中点击此地址时,都会执行localhost:3000功能。无论你遇到什么路线。 fn以及fn

将执行localhost:3000
localhost:3000/anything/else

当您在浏览器中点击function(req, res){ res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(); } 时执行此功能时,会通过{向此功能提供两个localhost:3000请求(objects)和响应(req) {1}}库。 res包含与URL,Body等请求相关的所有数据.Response包含可用于构建传递给客户端或浏览器(已发起请求)的响应的方法。

http

首先,标题写入响应,然后通过req通知res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(); 我们已完成写入响应,请将其发送给客户端。请注意,一旦您完成了回复,您可以在回复中写下任何其他内容。

关于删除http,您已经回答了浏览器继续加载的问题。实际上,浏览器正在等待来自服务器的响应。如果您要删除res.end(),服务器将无法通知客户已完成响应写入。