Javascript CSS和JS在URL中未使用尾随斜杠加载

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页面源

我正在本地构建一个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页面源代码,并点击其中的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中,然后在开头添加反斜杠,然后在文件系统中查找该文件。 我可能会反对这里的许多最佳实践,我才刚刚开始

  • 无论您在哪里引用JS和CSS文件,请在前面使用“/”,以便它始终在根目录中搜索文件。比如说,

    href=“/styles.css”

  • 始终使用express.static来提供静态文件


  • 这是预期的行为,当您点击
    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();
        }
    });