Javascript 如果在NodeJS中创建服务器时删除res.end(),会发生什么?
我正在学习使用NodeJS创建一个简单的服务器。以下是我从材料中提取的代码:Javascript 如果在NodeJS中创建服务器时删除res.end(),会发生什么?,javascript,node.js,http,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(
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()
,运行它,我看到的是浏览器不断加载,没有显示任何内容(甚至是白色空白页)。我不知道后面发生了什么)
感谢您的帮助
res.send()
正在向客户端发送响应。如果不将响应发送回客户端,则不会收到任何要在浏览器中呈现的响应
您必须从指定的每个路由向客户端发送响应。在您的示例中,当调用服务器的根地址时,将执行传递给createServer()
方法的函数。如果您在本地运行此操作,则将是localhost:3000
res.send()
正在向客户端发送响应。如果不将响应发送回客户端,则不会收到任何要在浏览器中呈现的响应
您必须从指定的每个路由向客户端发送响应。在您的示例中,当调用服务器的根地址时,将执行传递给
createServer()
方法的函数。如果您在本地运行此程序,那么这将是localhost:3000
首先让我们逐行中断您的代码
var http=require('http')
这是从node.js内置库导入http
库。可用于执行http
相关任务。创建服务器就是其中一项任务
server.listen(3000)
将启动一个http
服务器,该服务器将侦听来自localhost:3000
的http
请求。每次在浏览器中点击此地址时,都会执行fn
功能。不管你走哪条路fn
将对localhost:3000
以及localhost:3000/anything/else
当在浏览器中点击localhost:3000
执行此函数时,通过http
库向此函数提供两个对象
请求(req
)和响应(res
)req
包含与请求相关的所有数据,如URL、正文等。Response包含可用于生成响应的方法,该响应将传递给客户端或浏览器(发起请求的用户)
这里,首先将头写入响应,然后通过res.end()
通知http
,我们已经完成了响应的编写,请将其发送到客户端。请注意,一旦你写完回复,你就可以在回复中写下任何其他内容
关于删除
res.end()
您已经回答了浏览器一直在加载的问题。实际上,浏览器正在等待服务器的响应。若要删除res.end()
,服务器将无法通知客户端响应写入已完成。首先让我们逐行中断代码
var http=require('http')
这是从node.js内置库导入http
库。可用于执行http
相关任务。创建服务器就是其中一项任务
server.listen(3000)
将启动一个http
服务器,该服务器将侦听来自localhost:3000
的http
请求。每次在浏览器中点击此地址时,都会执行fn
功能。不管你走哪条路fn
将对localhost:3000
以及localhost:3000/anything/else
当在浏览器中点击localhost:3000
执行此函数时,通过http
库向此函数提供两个对象
请求(req
)和响应(res
)req
包含与请求相关的所有数据,如URL、正文等。Response包含可用于生成响应的方法,该响应将传递给客户端或浏览器(发起请求的用户)
这里,首先将头写入响应,然后通过res.end()
通知http
,我们已经完成了响应的编写,请将其发送到客户端。请注意,一旦你写完回复,你就可以在回复中写下任何其他内容
关于删除
res.end()
您已经回答了浏览器一直在加载的问题。实际上,浏览器正在等待服务器的响应。如果您要删除res.end()
,服务器将无法通知客户端已完成响应写入。试试看……我相信您对每条写入指令所做的是将数据放入流中,但只有在关闭流后才会写入,刷新或调用结束。试试看……我相信您对每个写入指令所做的是将数据放入流中,但只有在关闭流、刷新流或调用结束后才会写入。只需要最后一段来回答问题。我不知道你为什么把所有其他的东西放在前面,让你看不到真正的答案。我想,OP正在学习Node.js,我应该让他了解一下http
@Vipin Kumar非常感谢你的回答。我完全满意。因此,根据您的回答,res.end()
意味着向客户端发送响应(包括标题+额外文本/数据等),并通知服务器响应已完成,对吗?非常感谢:这里只需要最后一段
var server = http.createServer(fn).
server.listen(3000);
function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end();
}
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end();