2016-05-22 73 views
1

我想在浏览器中使用Nodejs显示一个HTML文件。但是,当我运行代码,我得到了以下错误:Nodejs错误:'不能读取属性isFile()的未定义'

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

请勿在此发布文字图片。发布文字。你的标题中已经包含了大部分内容。 – EJP

回答

0

您正在使用错误的函数。你应该使用:

stat=fs.lstatSync("your file") 

然后你的代码应该工作。

fs.lstat("your file",function (err,stats){})

是一个期待回调的异步函数。看看文档here

1

变量统计信息被设置为未定义,而不会引发错误。发生这种情况是因为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; 
} 
相关问题