Javascript Node.js查看源文件系统模块

Javascript Node.js查看源文件系统模块,javascript,node.js,view-source,Javascript,Node.js,View Source,我试图在node.js中创建一个web服务器,但遇到了一个奇怪的问题 服务器正确响应查看页面的请求,但当我在某些浏览器上查看页面源时,节点服务器会抛出错误 fs.js:379 binding.open(pathModule.toNamespacedPath(path), ^ TypeError: path must be a string or Buffer at Object.fs.readFile (fs.js:379:11) at Server.&

我试图在node.js中创建一个web服务器,但遇到了一个奇怪的问题

服务器正确响应查看页面的请求,但当我在某些浏览器上查看页面源时,节点服务器会抛出错误

fs.js:379
  binding.open(pathModule.toNamespacedPath(path),
          ^

TypeError: path must be a string or Buffer
    at Object.fs.readFile (fs.js:379:11)
    at Server.<anonymous> (/ProjectFolder/index.js:32:6)
    at Server.emit (events.js:180:13)
    at parserOnIncoming (_http_server.js:642:12)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:117:17)
这是我的密码:

文件系统:

> ProjectFolder
| > index.js
| > svrpath
| | > file.html
index.js:

var http = require('http');
var fs = require('fs');

function resolveFileName(req){
  var typs = {
    ".html": "text/html",
    ".css": "text/css",
    ".js": "text/javascript"
  };
  if(req === "/"){
    return {
      fname: "./svrpath/file.html",
      type: "text/html"
    };
  }else if(/^.*\.(html|css|js)$/.test(req)){
    return {
      fname: "./svrpath" + req,
      type: typs[req.replace(/^.*(?=\.(html|css|js)$)/, "")]
    };
  }else if(/^.*\/$/.test(req)){
    return {
      fname:"./svrpath" + req.replace(/\/$/, "") + ".html",
      type: "text/html"
    };
  }else{
    return "error400";
  }
}

http.createServer(function(req, res){
  var file = resolveFileName(req.url);
  fs.readFile(file.fname, function(err, data){
    if(err){
      throw err;
    }
    res.writeHead(200, {"Content-Type": file.type});
    res.end(data);
  });
}).listen();
svrpath/file.html

<!DOCTYPE html>
<html>
  <body>
    <p>Hello World!</p>
    <p>Some more content</p>
  </body>
</html>

你好,世界

更多内容


您的浏览器默认询问favicon.ico,对此您没有答案,这就是为什么您有未定义的路径(本例中没有)。您可以添加文件favicon.ico并为其创建条件:

函数解析文件名(req){
变量类型={
“.html”:“text/html”,
“.css”:“文本/css”,
.js:“text/javascript”
};
如果(请求==“/”){
返回{
fname:“./svrpath/file.html”,
键入:“text/html”
};
}else if(/^.*\(html | css | js)$/.test(req)){
返回{
fname:“./svrpath”+请求,
类型:typs[req.replace(/^.*(=\.(html | css | js)$)/,“”)]
};
}否则如果(/^.*\/$/.测试(需求)){
返回{
fname:“./svrpath”+req.replace(/\/$/,”)+“.html”,
键入:“text/html”
};
}else if(req==“/favicon.ico”){
返回{
fname:“./svrpath/favicon.ico”,
类型:“图像/x图标”
}
}否则{
返回“error400”;
}

}
您的浏览器默认询问favicon.ico,对此您没有答案,这就是为什么您有未定义的路径(本例中没有)。您可以添加文件favicon.ico并为其创建条件:

函数解析文件名(req){
变量类型={
“.html”:“text/html”,
“.css”:“文本/css”,
.js:“text/javascript”
};
如果(请求==“/”){
返回{
fname:“./svrpath/file.html”,
键入:“text/html”
};
}else if(/^.*\(html | css | js)$/.test(req)){
返回{
fname:“./svrpath”+请求,
类型:typs[req.replace(/^.*(=\.(html | css | js)$)/,“”)]
};
}否则如果(/^.*\/$/.测试(需求)){
返回{
fname:“./svrpath”+req.replace(/\/$/,”)+“.html”,
键入:“text/html”
};
}else if(req==“/favicon.ico”){
返回{
fname:“./svrpath/favicon.ico”,
类型:“图像/x图标”
}
}否则{
返回“error400”;
}

}
resolveFileName
如果找不到文件,则返回字符串。此字符串没有属性
fname
,因此您可能正在将
未定义的
传递给
fs.readFile
@lukas293否,
resolveFileName
用于将(例如)
host/test/page/
的请求更正为
host/test/page.html
。而且,文件是在有人查看页面时找到的,而不是在他们查看源代码时找到的。你知道,你可以用4行代码编写一个静态文件服务器,对吗<代码>常量表达式=要求('express');常量app=express();app.use(express.static(require('path').resolve('svrpath'));app.listen()
resolveFileName
如果找不到文件,则返回字符串。此字符串没有属性
fname
,因此您可能正在将
未定义的
传递给
fs.readFile
@lukas293否,
resolveFileName
用于将(例如)
host/test/page/
的请求更正为
host/test/page.html
。而且,文件是在有人查看页面时找到的,而不是在他们查看源代码时找到的。你知道,你可以用4行代码编写一个静态文件服务器,对吗<代码>常量表达式=要求('express');常量app=express();app.use(express.static(require('path').resolve('svrpath'));app.listen()
<!DOCTYPE html>
<html>
  <body>
    <p>Hello World!</p>
    <p>Some more content</p>
  </body>
</html>