Express-js无法获取我的静态文件,为什么?

359

我已将我的代码简化为最简单的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。我做错了什么?


请查看以下链接:http://only4ututorials.blogspot.com/2017/05/how-to-serve-static-file-in-express-js.html - Dexter
26个回答

0

在你的Node.js文件中

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

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

在你的pug文件中
...
script(type="text/javascript", src="static/your_javascript_filename")
...

请注意 "static" 这个词。它在 Node.js 文件和 Pug 文件中必须是相同的。

0

静态目录

请查看上述图片(静态目录)以获取目录结构

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'))

0

刚刚遇到了一个与此有所不同的问题(节点版本为v16.16.0),并已解决。

文件夹结构:

    project
      apidoc
      src
        index.js (aka server.js, app.js)
        public
          images
          css

我正在从“public”提供静态内容:

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

我想从 apidocs 文件夹(比当前文件夹高一级)中提供 API 文档服务。这样做不会起作用:

    app.use('/apidoc', express.static('../apidoc')))
    // this didn't work either
    app.use('/apidoc', express.static('/absolute/path/to/apidoc')))

这是解决方案:
    import path from 'path'
    import { fileURLToPath } from 'url';
    const __filename = fileURLToPath(import.meta.url);
    const __dirname = path.dirname(__filename);

    app.use('/apidoc', express.static(path.join(__dirname, '../apidoc')))
    app.use(express.static('src/public'))

我怀疑这是路径分隔符问题。


0
如果您的文件夹结构看起来像这样
myApp
  |
  |__ public
  |     |
  |     |__  stylesheets
  |     |     |
  |     |     |__ style.css
  |     |
  |     |___ img
  |           |
  |           |__ logo.png
  |
  |__ src
        |
        |__ app.js
    

使用下面的线:
app.use('/public', express.static(path.resolve('public')))

-1
app.use('/public/',express.static(path.join('./public')));

我找了好几个小时,终于找到了这个解决方案,对我来说非常有效!

-11

我刚刚尝试了这段代码,它可以正常工作。

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

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

正在工作,

之前(不工作):

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

只是尝试


1
这个完全没有变化,哈哈 - asciidude
嘿嘿,这之前对我有效,只是分享我的案例,我不知道为什么它有效。 - Doble boyler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接