node.js - 如何在 Express 中将静态文件提供给不同的路由?

标签 node.js express

我正在使用 Express 创建一个网站,当我尝试使用超过一层深度的路由时,我的静态文件都没有得到服务。例如,这是我正常工作的代码:

const express = require('express')
const app = express()
const port = 3000


app.use('/public', express.static(__dirname + '/public'))

app.get('/newSite', (req, res) => res.sendFile(__dirname + '/newSite.html') )

app.get('/organizations', (req, res) => res.sendFile(__dirname + '/organizations.html') )

app.listen(port, () => console.log(`listening on port ${port}!`))

我想对路径使用类似的东西:

app.get('/admin/organizations', (req, res) => res.sendFile(__dirname + '/organizations.html') )

我尝试摆弄 app.use 函数,因为我认为这就是我的问题所在,但到目前为止我还无法弄清楚。如何向任何路由提供静态文件?

编辑:这是相关的html

<html>
<head>


<link rel="stylesheet" type = "text/css" href = "./public/global.css"/>
<link rel="stylesheet" type = "text/css" href = "./public/organizations.css"/>

</head>
<body>

</body>

<script src = "public/jquery.js"> </script>

<script src = "public/organizations.js"> </script>

</html>

最佳答案

这与相对路径有关。使用express,使用绝对路径更安全

当你的路由进入一层后,发送的html文件需要搜索向上一层来找到静态文件。 (您可以确认:../public/global.css实际上会在您的路由/admin/organizations中正确链接静态文件)

简单修复:使用绝对路径(注意它仅以 / 开头)

<link rel="stylesheet" type = "text/css" href = "/public/global.css"/>

关于node.js - 如何在 Express 中将静态文件提供给不同的路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55853857/

相关文章:

javascript - 通过GET请求向express server请求数据返回的是document而不是data

node.js - [Op.like] : example from Sequelize documentation throws SQL error

javascript - 需要 Node JS 中间件功能

node.js - pm2 start app.js 在 15 次重启后退出

javascript - 如何将数据数组从express.js传递到ejs模板并渲染它们

node.js - 使用 .toArray 查询不会返回任何结果供查看

security - 反向代理是否使 node.js 安全?

node.js - sails.js View 未加载

javascript - 如何在node.js微服务的config.js中设置环境变量?

node.js - Node http-server 以 index.html 响应任何请求