Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 为什么以及何时在node.js中使用response.end()和return response.end()?_Javascript_Node.js - Fatal编程技术网

Javascript 为什么以及何时在node.js中使用response.end()和return response.end()?

Javascript 为什么以及何时在node.js中使用response.end()和return response.end()?,javascript,node.js,Javascript,Node.js,我最近开始学习node.js,我遇到了其中一个章节来了解“上传文件”的概念。正如您可以看到下面的代码(我已经在有疑问的那一行中进行了注释),是否有必要编写“return res.end();”,因为“res.end();”给出了输出。因此,这里出现了一个问题,比如,何时、为什么以及在何处使用'return'关键字和'res.end()' var http=require('http'); var Required=要求(“Required”); var fs=需要('fs'); var mv=需

我最近开始学习node.js,我遇到了其中一个章节来了解“上传文件”的概念。正如您可以看到下面的代码(我已经在有疑问的那一行中进行了注释),是否有必要编写“return res.end();”,因为“res.end();”给出了输出。因此,这里出现了一个问题,比如,何时、为什么以及在何处使用'return'关键字和'res.end()'

var http=require('http');
var Required=要求(“Required”);
var fs=需要('fs');
var mv=需要('mv');
http.createServer(函数(req,res){
如果(req.url='/fileupload'){
var form=new.IncomingForm();
解析(请求、函数(错误、字段、文件){
var oldpath=files.filetoupload.path;
var newpath='C:/Users/Your Name/'+files.filetoupload.Name;
mv(旧路径、新路径、函数(err){
如果(错误)抛出错误;
res.write('上传并移动文件!');
res.end();
});
});
}否则{
res.writeHead(200,{'Content-Type':'text/html'});
res.write(“”);
res.write(“
”); res.write(“”); res.write(“”);
return res.end();
仅用于代码流控制退出函数,而不在该函数中执行更多代码。调用请求处理程序回调的服务器不会注意返回值,因此代码不会尝试返回值。它只是停止函数中的任何进一步执行

在显示函数最后一行的
res.end()
的特定上下文中,
res.end()
return res.send()
之间没有任何功能差异

在某些其他上下文中,函数中可能还有一些其他代码可以稍后执行,
return
是阻止该代码执行的一种方法。
return res.end()
有时用作一种快捷方式,以避免出现
else
子句,如下所示:

 if (err) {
     return res.status(500).end();
 }
 // other code here for non-error case
而不是这样做:

 if (err) {
     res.status(500).end();
 } else {
    // other code here for non-error case
 }
这两种方法在功能上是相同的。第一种方法中的
返回
被用作一种快捷方式,以避免第二种方法中的
其他
(这不是我个人最喜欢的编码风格,但如果需要,这是一种合法的选择)



仅供参考,在您显示的代码中,
if(err)在异步回调中抛出err;
几乎从来都不是正确的错误处理方法,因为异常会进入一些异步基础设施,在那里你无法捕获它或用它做任何智能化的事情。我知道你的问题不是关于这个,但既然你在学习node.js,我想我应该指出这一点。在这种情况下,你您可能应该向客户端发送一个5xx错误状态。

这是编写
res.end();return;
的一个简单方法。
end()
IIRC没有返回值,您在请求侦听器中返回的值无论如何都会被忽略。“我读过其中一章来了解‘上载文件’。”-你在读哪本书?嗨,Bergi,事实上,这不是这本书本身,而是w3schools的教程,在nodejs教程下,这个主题就来了。至于初学者阶段,我不知道从哪里开始node.js,而是从一些在线教程中寻求帮助。有更好的学习方法吗?我提到的一些书太多了uch高级,我很难理解。如果您有任何建议,请与我分享。谢谢。@jfriend00它可能也对我有帮助,您能推荐一些资源吗?res.end()不是异步操作吗?
 if (err) {
     res.status(500).end();
 } else {
    // other code here for non-error case
 }