我已经将我的代码简化为我可以做的最简单的express-js应用程序:
var express = require("express"),
app = express.createServer();
app.use(express.static(__dirname + '/styles'));
app.listen(3001);
我的目录是这样的:
static_file.js
/styles
default.css
然而,当我访问http://localhost:3001/styles/default.css时,我得到以下错误:
Cannot GET / styles /
default.css
我使用express 2.3.3和节点0.4.7。我做错了什么?
试试http://localhost: 3001 / default。
要在请求URL中使用/styles,请使用:
app.use("/styles", express.static(__dirname + '/styles'));
请看本页上的例子:
//Serve static content for the app from the "public" directory in the application directory.
// GET /style.css etc
app.use(express.static(__dirname + '/public'));
// Mount the middleware at "/static" to serve static content only when their request path is prefixed with "/static".
// GET /static/style.css etc.
app.use('/static', express.static(__dirname + '/public'));
我也有同样的问题。我已经解决了以下代码的问题:
app.use('/img',express.static(path.join(__dirname, 'public/images')));
app.use('/js',express.static(path.join(__dirname, 'public/javascripts')));
app.use('/css',express.static(path.join(__dirname, 'public/stylesheets')));
静态请求示例:
http://pruebaexpress.lite.c9.io/js/socket.io.js
我需要一个更简单的解决方案。它存在吗?
我在我的应用程序中使用引导CSS, JS和字体。我在应用程序的根目录中创建了一个名为asset的文件夹,并将所有这些文件夹放在其中。然后在服务器文件中添加以下一行:
app.use("/asset",express.static("asset"));
这一行使我能够从/asset路径前缀(例如:http://localhost:3000/asset/css/bootstrap.min.css)加载资产目录中的文件。
现在在视图中,我可以简单地包括CSS和JS如下:
<link href="/asset/css/bootstrap.min.css" rel="stylesheet">
服务静态文件(css,图像,js文件)只需两步:
将CSS文件的目录传递给内置中间件express.static
Var express = require('express');
Var app = express();
/*public是我项目目录下的文件夹,包含三个文件夹
css,形象,js
* /
//css =>文件夹包含css文件
//image=>文件夹包含图片
//js =>文件夹包含javascript文件
app.use(表达。静态(公共/ css));
要访问CSS文件或图像,只需输入url http://localhost:port/filename.css ex:http://localhost:8081/bootstrap.css
注意:链接CSS文件到HTML只需输入<link href="file_name.css" rel="stylesheet">
如果我写这段代码
var express = require('express');
var app = express();
app.use('/css',express.static( 'public/css'));
要访问静态文件,只需输入url:localhost:port/css/filename.css
例:http://localhost: 8081 / css / bootstrap.css
注意链接CSS文件与HTML只需添加下面的行
<link href="css/file_name.css" rel="stylesheet">
这个方法对我很管用
app.use(express.static(path.join(__dirname, 'public')));
app.use('/img',express.static(path.join(__dirname, 'public/images')));
app.use('/shopping-cart/javascripts',express.static(path.join(__dirname, 'public/javascripts')));
app.use('/shopping-cart/stylesheets',express.static(path.join(__dirname, 'public/stylesheets')));
app.use('/user/stylesheets',express.static(path.join(__dirname, 'public/stylesheets')));
app.use('/user/javascripts',express.static(path.join(__dirname, 'public/javascripts')));
如果你的设置
myApp
|
|__ public
| |
| |__ stylesheets
| | |
| | |__ style.css
| |
| |___ img
| |
| |__ logo.png
|
|__ app.js
然后,
放入app。js
app.use('/static', express.static('public'));
并引用你的style.css:(在一些.pug文件中):
link(rel='stylesheet', href='/static/stylesheets/style.css')
Webpack让事情变得尴尬
作为对所有其他现有解决方案的补充:
首先:如果你将文件和目录的路径建立在cwd(当前工作目录)上,事情应该照常工作,因为cwd是你启动node(或npm start, yarn run等)时所在的文件夹。
然而……
如果你正在使用webpack, __dirname行为将非常不同,这取决于你的节点。__dirname设置和你的webpack版本:
In Webpack v4, the default behavior for __dirname is just /, as documented here.
In this case, you usually want to add this to your config which makes it act like the default in v5, that is __filename and __dirname now behave as-is but for the output file:
module.exports = {
// ...
node: {
// generate actual output file information
// see: https://webpack.js.org/configuration/node/#node__filename
__dirname: false,
__filename: false,
}
};
This has also been discussed here.
In Webpack v5, per the documentation here, the default is already for __filename and __dirname to behave as-is but for the output file, thereby achieving the same result as the config change for v4.
例子
例如,让我们说:
需要添加静态公用文件夹
它位于你的输出文件夹(通常是dist)旁边,在dist文件夹中没有子文件夹,它可能是这样的
const ServerRoot = path.resolve(__dirname /** dist */, '..');
// ...
app.use(express.static(path.join(ServerRoot, 'public'))
(重要的是:再次强调,这是独立于你的源文件在哪里,只看你的输出文件在哪里!)
更高级的Webpack场景
如果在不同的输出目录中有多个入口点,事情会变得更复杂,因为同一文件的__dirname对于输出文件(即条目中的每个文件)可能是不同的,这取决于该源文件合并到的输出文件的位置,更糟糕的是,相同的源文件可能合并到多个不同的输出文件中。
你可能想要避免这种场景,或者,如果你不能避免它,使用Webpack来管理和注入正确的路径,可能是通过DefinePlugin或EnvironmentPlugin。