ServeStatic未定义 - 纯node.js

时间:2017-08-28 21:18:26

标签: node.js mongodb express

这是我编写nodejs的第一天。这是一本名为node.js的书中的代码示例。这是一本很好的书,里面有关于如何将node.js编码为初学者的一些很好的信息。但是在1天之后,我遇到了一个错误。我已复制代码并尝试了所有内容,但似乎没有任何工作。这是我无法开始工作的代码。

尝试运行时出现错误:ReferenceError:未定义serveStatic

我现在已经安装了模块,并在我的文件中需要它。 现在我收到一个新错误:" TypeError:根路径必须是字符串"

现在说

TypeError:根路径必须是字符串     at serveStatic(/Applications/XAMPP/xamppfiles/htdocs/learningmern/chatapp1/node_modules/serve-static/index.js:44

   var http     =   require("http");
    var fs      =   require("fs");
    var path    =   require("path");
    var mime    =   require("mime");

    var cache = {}



// Helper functions
function send404(res){
    res.writeHead(404,{"Content-Type":"text/plain"});
    res.write("error 4o4");
    res.end();
}

function sendFile(res, filePath, fileContents){
    res.writeHead(200, {"Content-Type": mime.lookup(path.basename(filePath)) });
    res.end(fileContents);
}

function serveCache(res, cache, absPath){
    if (cache[absPath]){
        readFile(res, absPath, cache[absPath]);
    } else {
        fs.exists(absPath, function(exists){
            if (exists){
                fs.readFile(absPath, function(err, data){
                    if (err){
                        send404(res);
                    } else {
                        cache[absPath] = data;
                        fs.readFile(res, absPath, data);
                    }
                })
            } else {
                send404(res);
            }
        })
    }
}


//run server
var server = http.createServer(function(req, res){
    var filePath = false;

    if (req.url == "/"){
        filePath = "public/index.html";
    } else {
        filePath = "public" + req.url;
    }

    var absPath = "./" + filePath;
    serveStatic(res, cache, absPath);
});

server.listen(3000, function(){
    console.log("server started at port 3000");
});

由于

2 个答案:

答案 0 :(得分:0)

您需要安装该软件包。运行这个:

npm install serve-static

也需要它。把它放在最上面的要求部分。

var serveStatic = require('serve-static')

答案 1 :(得分:0)

安装server-static npm后,这是您正在处理的错误的解决方案。您在定义变量之前调用变量,因此您需要将代码更改为

   var http     =   require("http");
    var fs      =   require("fs");
    var path    =   require("path");
    var mime    =   require("mime");
    var serveStatic = require('serve-static');

    var filePath = ""; //define filePath here for the functions to not run an error
    var absPath = "./" + filePath;
    var cache = {};
    var server = http.createServer(function(req, res){


    if (req.url == "/"){
        filePath = "public/index.html";
    } else {
        filePath = "public" + req.url;
    }


    serveStatic(res, cache, absPath);
   });



// Helper functions
function send404(res){
    res.writeHead(404,{"Content-Type":"text/plain"});
    res.write("error 4o4");
    res.end();
}

function sendFile(res, filePath, fileContents){
    res.writeHead(200, {"Content-Type": mime.lookup(path.basename(filePath)) });
    res.end(fileContents);
}

function serveCache(res, cache, absPath){
    if (cache[absPath]){
        readFile(res, absPath, cache[absPath]);
    } else {
        fs.exists(absPath, function(exists){
            if (exists){
                fs.readFile(absPath, function(err, data){
                    if (err){
                        send404(res);
                    } else {
                        cache[absPath] = data;
                        fs.readFile(res, absPath, data);
                    }
                })
            } else {
                send404(res);
            }
        })
    }
}


//run server

server.listen(3000, function(){
    console.log("server started at port 3000");
});