Express-js不能GET我的静态文件,为什么?

我已经将我的代码简化为我可以做的最简单的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.3node 0.4.7。我做错了什么?

351263 次浏览

http://localhost:3001/default.css试试。

要在请求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'));

default.css应该在http://localhost:3001/default.css处可用

app.use(express.static(__dirname + '/styles'));中的styles只是告诉express在styles目录中查找要服务的静态文件。它不会(令人困惑地)构成它可用路径的一部分。

除此之外,确保静态文件路径以/ (ex…/资产/ css)……在主目录(/main)之上的任何目录中提供静态文件

我也有同样的问题。我已经解决了以下代码的问题:

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文件,并添加一个路由到它:

app.get('/css/MyCSS.css', function(req, res){
res.sendFile(__dirname + '/public/css/MyCSS.css');
});

那么它似乎起作用了。

在你的server.js中:

var express   =     require("express");
var app       =     express();
app.use(express.static(__dirname + '/public'));

你已经分别声明了express和app,创建一个名为“public”的文件夹或其他你喜欢的文件夹,但你可以访问这些文件夹。在模板src中,您已经添加了从/public的相对路径(或静态文件的文件夹destiny的名称)。当心路上的栏杆。

尝试用http://localhost:3001/default.css访问它。

   app.use(express.static(__dirname + '/styles'));

你实际上给它的名称文件夹,即样式,而不是你的子url。

对我有用的是:

而不是在app.js中编写app.use(express.static(__dirname + 'public/images'));

< p >简单地写 app.use(express.static('public/images')); < / >强

即删除路径中的根目录名。然后你可以在其他js文件中有效地使用静态路径,例如:

<img src="/images/misc/background.jpg">

希望这对你有所帮助。

我在我的应用程序中使用引导CSS, JS和字体。我在应用程序的根目录中创建了一个名为asset的文件夹,并将所有这些文件夹放在其中。然后在服务器文件中添加以下一行:

app.use("/asset",express.static("asset"));

这一行使我能够从/asset路径前缀(如:http://localhost:3000/asset/css/bootstrap.min.css)加载asset目录中的文件。

现在在视图中,我可以简单地包括CSS和JS如下:

<link href="/asset/css/bootstrap.min.css" rel="stylesheet">

服务静态文件(css,图像,js文件)只需两步:

  1. 将CSS文件的目录传递给内置中间件express.static

    var express = require('express');
    var app = express();
    /*public is folder in my project directory contains three folders
    css,image,js
    */
    //css  =>folder contains css file
    //image=>folder contains images
    //js   =>folder contains javascript files
    app.use(express.static( 'public/css'));
    
  2. to access css files or images just type in url http://localhost:port/filename.css ex:http://localhost:8081/bootstrap.css

note: to link css files to html just type<link href="file_name.css" rel="stylesheet">

if i write this code

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 < / p >

请注意链接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')));

这对我来说很有用:

app.use('*/css',express.static('public/css'));
app.use('*/js',express.static('public/js'));
app.use('*/images',express.static('public/images'));

如果你的设置

myApp
|
|__ public
|     |
|     |__  stylesheets
|     |     |
|     |     |__ style.css
|     |
|     |___ img
|           |
|           |__ logo.png
|
|__ app.js
< p >, < br > 输入app.js

app.use('/static', express.static('public'));

并引用你的style.css:(在一些.pug文件中):

link(rel='stylesheet', href='/static/stylesheets/style.css')
  1. 在Nodejs项目中创建一个名为“public”的文件夹 李文件夹。< / >
  2. 将index.html文件放入Nodejs项目文件夹。
  3. 将所有脚本和css文件放入公共目录 李文件夹。< / >
  4. 使用app.use( express.static('public'));

  5. index.html中,脚本到<script type="text/javascript" src="/javasrc/example.js"></script>的正确路径

现在一切都好了。

静态目录

检查上面的图像(静态目录)的目录结构

const publicDirectoryPath = path.join(__dirname,'../public')
app.use(express.static(publicDirectoryPath))




//  or


app.use("/", express.static(publicDirectoryPath))
app.use((req, res, next) => {
res.sendFile(path.join(publicDirectoryPath,'index.html'))

Webpack让事情变得尴尬

作为对所有其他现有解决方案的补充:

首先:如果你的文件和目录的路径基于cwd(当前工作目录),事情应该照常工作,因为cwd是你开始node(或npm startyarn run等)时所在的文件夹。

然而……

如果你正在使用webpack, __dirname行为将非常不同,这取决于你的node.__dirname设置和你的webpack版本:

    在Webpack v4中,__dirname的默认行为只是/,如记录在这里
      在这种情况下,你通常想把它添加到你的配置中,使它像v5中的默认值一样,也就是__filename__dirname现在表现为输出文件的:
      module.exports = {
      // ...
      node: {
      // generate actual output file information
      // see: https://webpack.js.org/configuration/node/#node__filename
      __dirname: false,
      __filename: false,
      }
      };
      
    • 这也已经讨论过在这里
  1. 在Webpack v5中,根据这里的文档,默认的__filename__dirname已经作为输出文件的,从而实现与v4的配置更改相同的结果。

例子

例如,让我们说:

  • 你想要添加静态public文件夹
  • 它位于你的output文件夹(通常是dist)旁边,并且你在dist中没有子文件夹,它可能看起来像这样
const ServerRoot = path.resolve(__dirname /** dist */, '..');
// ...
app.use(express.static(path.join(ServerRoot, 'public'))

(重要的是:,这是独立于你的源文件在哪里,只看你的输出文件在哪里!)

更高级的Webpack场景

如果在不同的输出目录中有多个入口点,事情会变得更复杂,因为相同文件的__dirname对于输出文件(即entry中的每个文件)可能是不同的,这取决于这个源文件合并到的输出文件的位置,更糟糕的是,相同的源文件可能合并到多个不同的输出文件中。

你可能想要避免这种场景,或者,如果你不能避免它,使用Webpack来管理和注入正确的路径,可能是通过DefinePluginEnvironmentPlugin

我只是尝试这个代码和工作

const exp = require('express');
const app = exp();


app.use(exp.static("public"));

和工作,

工作前(未工作):

const express = require('express');
const app = express();
app.use(express.static("public"));

试试

提供__dirname的问题是__dirname返回当前文件的路径,而不是项目的文件。 此外,如果使用动态头文件,每个页面将在不同的路径中查找静态文件,这将不起作用。 对我来说,最好的方法是用__dirname代替process.cwd(),它总是提供项目文件的路径
app.use(express.static(process.cwd() + '/public'));

在你的项目中:

link rel="stylesheet" href="/styles/default.css"

看:process.cwd() vs __dirname的区别是什么?

尝试'./public'而不是__dirname + '/public'。 类似地,尝试process.cwd() + '/public'.

有时我们会丢失正在使用的目录,最好避免假设文件位于我们指定的位置。

类似地,避免假设在依赖关系的深度中,路径在每个级别上都以相同的方式解释。

我在用

app.use(express.static('public'))

当公共文件夹中没有名为index.html的文件时。

我在浏览器中得到以下错误:

“;不能得到/"

当我将文件重命名为“index.html”时,它可以正常工作。

在你的nodejs文件中

const express = require('express');
const app = express();


app.use('/static', express.static('path_to_static_folder'));

你的哈巴狗档案里

...
script(type="text/javascript", src="static/your_javascript_filename")
...

注意“静态”;词。nodejs文件和pug文件必须相同。

app.use(express.static(__dirname+'/'));
这对我有用,我试着使用公共目录,但它不起作用。 但在这种情况下,我们提供了访问目录中的整个静态文件,希望对您有所帮助!< / p >