我正在尝试使用Nodejs在浏览器中显示html文件。但是当我运行代码时出现以下错误:
cannot read property isFile() of undefined
这是我正在使用的代码:
var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
var mimeTypes = {
"html" : "text/html",
"jpeg" : "image/jpeg",
"jpg" : "image/jpg",
"png" : "image/png",
"js" : "text/javascript",
"css" : "text/css"
};
var stats;
http.createServer(function(req, res) {
var uri = url.parse(req.url).pathname;
var fileName = path.join(process.cwd(),unescape(uri));
console.log('Loading ' + uri);
try {
stats = fs.lstat(fileName);
} catch(e) {
res.writeHead(404, {'Content-type':'text/plain'});
res.write('404 Not Found\n');
res.end();
return;
}
// Check if file/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);
return;
} else if (stats.isDirectory()) {
res.writeHead(302, {
'Location' : 'index.html'
});
res.end();
} else {
res.writeHead(500, {
'Content-type' : 'text/plain'
});
res.write('500 Internal Error\n');
res.end();
}
}).listen(3000);
我得到的错误是在stats.isFile()附近。我试图解决错误。但这对我不起作用。我需要一些解决此错误的建议。
答案 0 :(得分:1)
变量stats设置为undefined,不会抛出错误。发生这种情况是因为fs.lstat(fileName)返回undefined。
在if语句之前,或者也许代替try catch块,你可能想要做类似的事情:
if (!stats) {
res.writeHead(404, {'Content-type':'text/plain'});
res.write('404 Not Found\n');
res.end();
return;
}
答案 1 :(得分:0)
您使用了错误的功能。你应该使用:
stat=fs.lstatSync("your file")
然后你的代码应该可以工作。
fs.lstat("your file",function (err,stats){})
是一个异步函数,需要回调。请查看文档here。