1

我有以下代码使用 node.js 在 static/college.html 中提供网页但它遇到错误并在浏览器中显示“内部服务器错误:无法读取文件”,这是在代码中打印的用于测试的行。

任何建议以及如何解决这个问题?谢谢

// Require the functionality we need to use:
var http = require('http'),
        url = require('url'),
        path = require('path'),
        mime = require('mime'),
        path = require('path'),
        fs = require('fs');

// Make a simple fileserver for all of our static content.
// Everything underneath <STATIC DIRECTORY NAME> will be served.
var app = http.createServer(function(req, resp){
        var filename = path.join(__dirname, "static", url.parse(req.url).pathname);
        (fs.exists || path.exists)(filename, function(exists){
                if (exists) {
                        fs.readFile(filename, function(err, data){
                                if (err) {
                                        // File exists but is not readable (permissions issue?)
                                        resp.writeHead(500, {
                                                "Content-Type": "text/plain"
                                        });
                                        resp.write("Internal server error: could not read file");
                                        resp.end();
                                        return;
                                }

                                // File exists and is readable
                                var mimetype = mime.lookup(filename);
                                resp.writeHead(200, {
                                        "Content-Type": mimetype
                                });
                                resp.write(data);
                                resp.end();
                                return;
                        });
                }else{
                        // File does not exist
                        resp.writeHead(404, {
                                "Content-Type": "text/plain"
                        });
                        resp.write("Requested file not found: "+filename);
                        resp.end();
                        return;
                }
        });
});
app.listen(3456);

感谢您迄今为止的建议。我只是打印这一行url.parse(req.url).pathname,但它在那里显示为空。那里可能有什么问题?

4

2 回答 2

3

检查文件名,确保它不是目录或 null 或权限问题。添加一个代理来跟踪双向的 HTTP 参数。并使用 phantomjs 运行并使用 curl 访问该站点。

添加单元测试

于 2013-07-30T20:08:05.633 回答
0

很可能是权限问题。尝试修复文件的权限。或以 root 身份运行节点

为什么不使用 Express 框架,它会为您处理静态文件夹。

无论如何,您也应该使用 NginX 以可扩展的方式处理静态文件。

于 2013-07-30T20:18:02.180 回答