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.css
, pathname
将会是css/main.css
filepath
被声明为./public/
filepath + pathname
名将是./public/css/main.css
fs.existsSync
将返回true
并写入数据作为响应 。
因为你的文件filepath
是./public/
只有公共目录下的文件可以用这个方法发送,所以你的* app.js /文件是安全的 。
我已经使用同步function以同步的方式写了这个,你也可以用asynchronous的方式来完成。
希望这可以帮助