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