我一直在学习Node,虽然我理解所有的代码,但是有什么事情,但有一件事困扰着我。所以这是代码:
const http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
// array of mime types
var mimeTypes = {
"html" : "text/html",
"jpeg" : "image/jpeg",
"jpg" : "image/jpeg",
"png" : "image/png",
"js" : "text/javascript",
"css" : "text/css"
}
// create Server
http.createServer( (req, res) => {
var uri = url.parse(req.url).pathname;
var fileName = path.join(process.cwd(),unescape(uri));
console.log('Loading ' + process.cwd() + uri);
var stats;
try{
stats = fs.lstatSync(fileName);
} catch(err) {
res.writeHead(404, {'Content-Type' : 'text/plain'});
res.write('404 Not found\n');
res.end();
return; // if I remove this my code fails.
}
// check if file or directory
if (stats.isFile()) {
var mimeType = mimeTypes[path.extname(fileName).split(".").reverse()[0]]
res.writeHead(200, {'Content-Type': mimeType});
var fileStream = fs.createReadStream(fileName);
fileStream.pipe(res);
} else if (stats.isDirectory()) {
res.writeHead(200 , {
"Location" : "index.html"
});
res.end();
} else {
res.writeHead(500, {"Content-Type" : "text/plain"});
res.write("500 Internal Error\n");
res.end();
}
}).listen(8080);
所以如果我在catch块中删除空白返回,我的代码将失败。
返回:
不退货:
返回是否允许执行继续,任何人都可以解释? 谢谢。
答案 0 :(得分:3)
如果您不在return
区域内catch
- 代码将继续运行并将转到以下行:
stats.isFile()
现在,stats
未定义,因为那里存在异常,因此您的代码实际上是undefined.isFile()
,这将在那里引发另一个异常。
答案 1 :(得分:3)
我认为你期望res.end()
将停止函数执行/请求处理,而是只关闭响应体。然后可以返回响应,但是try / catch块之后的代码会继续并遇到问题。停止执行的唯一正确方法是return;
语句。