Javascript CSS和JS在URL中未使用尾随斜杠加载
我正在本地构建一个Node.js服务器,它将在Javascript CSS和JS在URL中未使用尾随斜杠加载,javascript,node.js,Javascript,Node.js,我正在本地构建一个Node.js服务器,它将在localhost:8080上侦听。登录页是一个名为index.html的html文件。如果我键入localhost:8080/index.html,html以及与index.html位于同一文件夹中的CSS文件(main.CSS)和JavaScript(main.js)将正常加载。但是如果我用斜杠输入相同的URL,如localhost:8080/index.html/,它只加载html,而不加载CSS或JS。我试着进入Chrome中的HTML页面源
localhost:8080
上侦听。登录页是一个名为index.html
的html文件。如果我键入localhost:8080/index.html
,html以及与index.html
位于同一文件夹中的CSS文件(main.CSS
)和JavaScript(main.js
)将正常加载。但是如果我用斜杠输入相同的URL,如localhost:8080/index.html/
,它只加载html,而不加载CSS或JS。我试着进入Chrome中的HTML页面源代码,并点击其中的css文件,它似乎在寻找一个localhost:8080/index.HTML/main.css
文件(从浏览器的地址栏中可以看到),该文件显然不存在。出于某种原因,它似乎假设index.html
是一个目录。任何帮助都会很好
编辑:
服务器处理路由的部分如下所示(我刚刚开始,尝试在不使用Express.js的情况下进行路由):
consthttp=require(“http”);
常数fs=要求(“fs”);
常量路径=要求(“路径”);
const url=require(“url”);
createServer(函数(请求、响应){
函数writeContentType(headerText){
response.setHeader(“内容类型”,headerText);
}
让requestedPath=url.parse(request.url,true).pathname;
requestedPath=requestedPath.replace(/^\/+\124;\/+$/g,“”);
requestedPath=requestedPath.replace(//\//g,“\\”);
requestedPath=“\\”+requestedPath;
如果(requestedPath==“\\”)requestedPath=“\\index.html”;
如果(!fs.existsSync(uu dirname+requestedPath)){
log(“文件不存在,请求的路径为”+\uu dirname+requestedPath);
writeContentType(“文本/html”);
写入(“未找到错误404页”);
response.end();
}否则{
让responseFile=fs.readFileSync(_dirname+requestedPath,函数(err){
控制台日志(err);
});
if(responseFile){
让fileExtension=path.extname(requestedPath);
交换机(文件扩展名){
case“.html”:writeContentType(“text/html”);break;
case“.css”:writeContentType(“text/css”);break;
case“.js”:writeContentType(“text/javascript”);break;
case“.svg”:writeContentType(“image/svg+xml”);中断;
案例“.jpg”:
大小写“.jpeg”:writeContentType(“图像/jpeg”);中断;
}
response.end(responseFile);
}
}
}).听(8080);
想法是去掉requestedPath
开头和结尾的所有斜杠,用反斜杠替换内部的斜杠,因为我的文件系统在windows中,然后在开头添加反斜杠,然后在文件系统中查找该文件。
我可能会反对这里的许多最佳实践,我才刚刚开始
这是预期的行为,当您点击
localhost:8080/
时,您希望得到index.html
因此,当您添加尾随斜杠时,它假定它是一个目录,并在那里查找您的文件
尝试使用npm包或定制中间件,例如:
app.use(function(req, res, next) {
if (req.path.substr(-1) == '/' && req.path.length > 1) {
const query = req.url.slice(req.path.length);
res.redirect(301, req.path.slice(0, -1) + query);
} else {
next();
}
});
类似的问题也可以找到您能告诉我们如何创建服务器的代码吗?我现在也添加了服务器代码。
app.use(function(req, res, next) {
if (req.path.substr(-1) == '/' && req.path.length > 1) {
const query = req.url.slice(req.path.length);
res.redirect(301, req.path.slice(0, -1) + query);
} else {
next();
}
});