Javascript Node.js查看源文件系统模块
我试图在node.js中创建一个web服务器,但遇到了一个奇怪的问题 服务器正确响应查看页面的请求,但当我在某些浏览器上查看页面源时,节点服务器会抛出错误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.&
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>