Nodejs错误:'无法读取未定义的属性isFile()'

时间:2016-05-22 04:57:30

标签: node.js

我正在尝试使用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()附近。我试图解决错误。但这对我不起作用。我需要一些解决此错误的建议。

2 个答案:

答案 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