Node.js 使用node express提供静态文件时,正确的脚本路径是什么?

Node.js 使用node express提供静态文件时,正确的脚本路径是什么?,node.js,express,filepath,static-files,Node.js,Express,Filepath,Static Files,我总是很难找到脚本的正确路径,这一定是因为我提供静态文件的方式,因为我的路径是正确的。在我的代码中,我试图包含materialize框架,但没有找到它,我不明白为什么。我在/浏览器中提供我的文件 app.use(express.static(path.join(__dirname, '../browser'))); 在browser/index.html中,我使用了(我相信)正确的路径,但它不起作用。任何帮助都会很棒,所以我不会再犯同样的错误了!多谢各位 flights/server/app.

我总是很难找到脚本的正确路径,这一定是因为我提供静态文件的方式,因为我的路径是正确的。在我的代码中,我试图包含materialize框架,但没有找到它,我不明白为什么。我在/浏览器中提供我的文件

app.use(express.static(path.join(__dirname, '../browser')));
在browser/index.html中,我使用了(我相信)正确的路径,但它不起作用。任何帮助都会很棒,所以我不会再犯同样的错误了!多谢各位

flights/server/app.js

    var express = require('express');
    var path = require('path');
    var morgan = require('morgan');
    var bodyParser = require('body-parser');

    var app = express();
    module.exports = app;
    app.use(morgan('dev'));


    app.use(express.static(path.join(__dirname, '../browser')));
    app.use(bodyParser.urlencoded({
        extended: false
    }));
    app.use(bodyParser.json());

    var PORT = process.env.PORT || 1337;
    app.listen(PORT, function() {
        console.log('Server is listening on port 1337!');
    });
flights/browser/index.html

<!DOCTYPE html>
    <html>
    <head>
        <title>Title of the document</title>
        <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no">
        <link rel="stylesheet" type="text/css" href="../css/style.css" />
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
        <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
        <link type="text/css" rel="stylesheet" href="../materialize/css/materialize.min.css" media="screen,projection" />
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
        <script type="text/javascript" src="../materialize/js/materialize.min.js"></script>
        <script src="flight.js"></script>
    </head>

    <body>
        The content of the document......
    </body>
    </html>

首先要了解的是,您需要将所有静态文件(如css、js)放在一个文件夹中,该文件夹可以分别包含css、js和其他内容的子文件夹

您的结构应该是根项目目录中类似public的单个文件夹,然后在该公共文件夹中放置css、js和其他内容的文件夹

还有这条线

app.use(express.static(path.join(__dirname, '../browser')));
这并不完全正确。用这样的东西

app.use(express.static(path.join(__dirname, 'public')));
public是包含所有静态文件的文件夹

现在假设您在css文件夹中放置了一个materialize文件夹,其中包含一些materialise.css文件,那么URL将类似于


也请查看

谢谢!所以,当我将materialize文件夹放入公用文件夹并提供公用文件夹中的所有文件时,materialize被找到了。但我试图了解路径,因为我不想将所有文件放在同一个文件夹中。我把js文件留在了浏览器文件夹中。我现在提供来自公用文件夹和浏览器的所有文件(添加了app.use(express.static('browser')),然后查看我的flights/public/index.html文件我有我的js文件的路径:'../browser/flights.js'。它不起作用。你能解释一下原因吗?路径正确+我在浏览器文件夹中提供文件。谢谢!!静态文件不会像通常在html CSS项目中那样被引用。当你使用express.static(“browser”)时,它会将这个文件夹设置为根路径,如果你想访问像browser/index.js这样的文件,那么如上所述,如果你想给出一个静态文件的路径,只需输入路径
index.js
,它就会转换为Im,我不确定我是否理解你的意思。如果我从浏览器提供文件,那么到index.js(来自public/index.html)的路径将不是browser/index.js,而是index.js,因为我在浏览器中提供所有文件。对吗?另外,如何从index.html文件“访问”其他文件?例如,如果我npm安装模块,我必须从index.html访问它们。我是否还必须为我的server/app.js文件中的所有节点模块提供服务,或者我是否可以不提供服务,而仍然从index.html访问它们?非常感谢您的回答和帮助!!在express.static中,您放置的任何路径都将作为根,之后您必须访问与根相关的所有其他对象。假设您在express.static中放置了一个名为X的目录,那么X将充当根目录。然后,无论X里面是什么,你们都可以给出它的相对路径。因此,在本地系统上,
X/index.html
将被引用为localhost:3000/index.html,但
X/somefolder/index.html
将被引用为localhost:3000/somefolder/index.html。节点模块没有什么特别之处,您可以在注释中引用它们。因此,我首先必须添加app.use(express.static('node_modules')),因为它们不在我的公用文件夹中,而是在flights/node_模块中。然后从flights/public/index.html中的index.html开始(比如jQuery)'jQuery/dist/jQuery.min.js'=一个相对路径?我尝试过的所有其他路径组合都不起作用。
app.use(express.static(path.join(__dirname, 'public')));