Nodejs 如何访问服务器的其他目录?

Nodejs 如何访问服务器的其他目录?

我在界面里写了链接,想访问服务根目录下的东西,单手nodejs好像总是从public下开始访问 比如: 我的网站放在/var/web/myweb这个目录下, 另外一个图片放在根目录/game下, 不管我怎么写链接,总是从web/myweb/public下开始访问, 请问怎么解决这个问题呢,貌似用相对路径也不行~~~~ 求救

5 回复

当然可以。以下是如何使用 Node.js 访问服务器上其他目录的具体步骤和示例代码。

背景信息

你提到你的网站根目录是 /var/web/myweb,而你希望访问的是 /var/web/game 目录下的文件。然而,当前的设置使得 Node.js 总是从 myweb/public 目录开始访问资源。

解决方案

1. 修改 Express 的静态文件服务配置

你可以通过修改 Express 应用来更改静态文件服务的目录。默认情况下,Express 会使用 public 目录作为静态文件的服务目录。你需要调整这个配置来指向你想要的目录。

示例代码

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

const app = express();

// 设置静态文件服务目录为 /var/web/game
app.use('/game', express.static(path.join(__dirname, '../game')));

// 设置静态文件服务目录为 /var/web/myweb/public
app.use(express.static(path.join(__dirname, 'public')));

const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

在这个示例中:

  • app.use('/game', express.static(path.join(__dirname, '../game'))); 这一行告诉 Express 从 /var/web/game 目录提供静态文件,并且这些文件可以通过 /game 路径访问。
  • app.use(express.static(path.join(__dirname, 'public'))); 这一行保持原有的配置,使得 /var/web/myweb/public 目录下的文件可以通过根路径(例如 /)访问。

2. 确保正确的路径

确保路径是正确的。例如,如果你的 HTML 文件中有这样的链接:

<img src="/game/myimage.png" alt="My Image">

这将尝试从 /var/web/game/myimage.png 获取图像文件。

总结

通过调整 Express 的静态文件服务配置,你可以轻松地让 Node.js 项目访问到服务器上的其他目录。上面的代码片段展示了如何将静态文件服务目录更改为 /var/web/game,这样你就可以通过 /game 路径访问该目录下的文件。


稍微了解点黑客知识啊楼主…如果相对路径也行的话…那不是可以读到 /etc 下面去了吗

你需要提供服务器文件的访问路由,比如 http://www.aaa.com/game/

你应该提供/game文件夹的访问路由,并且把"/game/"在服务器转换成你的绝对物理路径

感谢提供了一种想法 恩,我在路由请求,require这个文件,饭后返回,这样行不行呢? 目前用软连接解决了这个问题,但很想尝试下你的方法

要解决这个问题,你需要配置你的Node.js服务器以正确处理来自不同目录的文件请求。通常,你可以在启动HTTP服务器时配置静态文件服务来实现这一点。

以下是一个使用Express框架的简单示例,它可以帮助你访问服务器上的不同目录:

示例代码

首先,确保你已经安装了expressexpress-static模块:

npm install express express.static

然后,你可以创建一个简单的Express应用,并配置它以允许访问不同的目录:

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

const app = express();
const port = 3000;

// 配置静态文件服务
app.use('/public', express.static(path.join(__dirname, 'public')));
app.use('/game', express.static(path.join(__dirname, '../game')));

app.get('/', (req, res) => {
    res.send('<html><body><a href="/public/index.html">访问public下的文件</a><br><a href="/game/image.png">访问根目录下的文件</a></body></html>');
});

app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

解释

  1. Express静态文件服务express.static中间件用于提供静态文件服务。你可以指定一个或多个目录作为静态资源。
  2. 路径配置:通过path.join函数可以轻松地构造绝对路径。
  3. 路由处理:定义了一个简单的路由来展示两个链接,分别指向publicgame目录下的文件。

这样配置后,当你访问http://localhost:3000/时,你会看到两个链接,点击它们可以分别访问public目录下的index.html和根目录下的game/image.png

通过这种方式,你可以灵活地控制哪些文件可以被外部访问,以及它们所在的目录。

回到顶部