CSS文件path在本地主机和文本编辑器上都不起作用

所以,我正在使用Node.js和Express编写用JS编写的URL Shortener。 我刚刚完成前端,但我有一个问题,让CSS工作。 我的项目树看起来像这样:

public css main.css views index.html app.js 

在我的index.html文件中,我有我的.css文件链接这种方式

 <link rel="stylesheet" type="text/css" href="../public/css/main.css"> 

而且它使支架编辑器中的网站工作,但是当我启动本地服务器CSS不,我得到

 Cannot GET /public/css/main.css 

我想这与我在app.js中声明的静态path有关

 app.use(express.static(path.join(__dirname, "public"))); 

因为当我将index.html中的path更改为/css/main.css所有工作都在localhost上,但是我的本地文本编辑器(Brackets)无法看到该css文件。 我应该怎么做才能在文本编辑器和本地主机上进行开发?

有几种方法(可能更多):

选项1

去你的浏览器debugging你的应用程序(只使用你的应用程序来查看修改,而不是括号编辑器)

选项2

设置你的href=""属性为静态位置,例如href="localhost:8080/css/main.css" 。 然后(可能)当你同时运行你的编辑器和应用程序时,你会得到两边同样的CSS文件。

选项3

添加另一行样式表来加载它们。

 <link rel="stylesheet" type="text/css" href="../public/css/main.css"> <link rel="stylesheet" type="text/css" href="/css/main.css"> 

解决这个问题的最常用的方法,通常是选项1 ,所以你可以不用担心支架的内部浏览器,并找出与实时重新加载模块的组合,这将复制你从编辑器得到的额外。

浏览器发送获取请求来获取一个CSS文件,你可以在代码中添加下面的代码片段:

 var fs = require('fs'); var url = require('url'); var query = url.parse(req.url, true) var pathname = query.pathname var filepath = "./public/" if(fs.existsSync(filepath+pathname)){ res.end(fs.readFileSync(filepath+pathname)); } 

现在在html页面中

 <link rel="stylesheet" type="text/css" href="css/main.css"> 

解释

浏览器将发送一个GET请求到css/main.csspathname将会是css/main.css filepath声明./public/

filepath + pathname名将是./public/css/main.css

fs.existsSync将返回true并写入数据作为响应

因为你的文件filepath./public/只有公共目录下的文件可以用这个方法发送,所以你的* app.js /文件是安全的

我已经使用同步function以同步的方式写了这个,你也可以用asynchronous的方式来完成。

希望这可以帮助