使用Node.js和Socket.io定位文件

时间:2018-01-21 19:53:49

标签: javascript node.js sockets include filesystems

我在使用Node.js和Socket.io在客户端进行本地包含时遇到问题。这可能是我一生中大部分时间用于文件请求的PHP / Apache心态。

在我的服务器上,我同样加载页面:

var express = require("express");
var app = express();
var path = require("path");
var server = require("http").createServer(app);
var io = require("socket.io")(server);
var mysql = require("mysql");

var port = process.env.PORT;
var ip = process.env.IP;

app.use(express.static(__dirname + "/client"));

//start opening socket connection handlers ...

我的文件也是这样组织的:

  • 游戏
      • BIGINT
      • threejs
      • 等...
    • VERSION_1
      • 客户端
        • 的index.html
        • index.js
        • index.css
      • server.js
      • database.sql
    • VERSION_2
    • version_3
    • 等...

根据我想要运行的版本,打开该版本的目录并运行其server.js文件。该行使用行app.use(express.static(__dirname + "/client"))将客户端重定向到/client/index.html。但现在只有<script></script><link>标签才能访问客户端文件夹中的文件,但不能访问我在各个版本中使用的库文件夹中的那些库。

如何更改我的代码,以便能够从/version_x/client/index.html访问libraries文件夹中的文件,同时仍然将客户端指向正确的html文件?

注意:由于这个问题,在过去几周我一直在学习Node.js,我被迫只使用支持CDN的库。

2 个答案:

答案 0 :(得分:1)

var ip = process.env.IP;之后添加以下行:

app.use('/libraries', express.static(path.join(__dirname, '..', 'libraries'));

这样做是为您的应用程序服务器添加新路由。您现在可以通过/games/libraries访问/libraries文件夹中的所有文件。

它是如何工作的?您的express路由器根据提供的路径使用不同的中间件。该行告诉路由器,当static下的任何内容的HTTP请求进入时,使用../libraries中间件并提供来自/libraries的文件。

答案 1 :(得分:1)

您可以使用express.static

提供更多文件夹
//Serve Client Folder
app.use(express.static(__dirname + "/client"));

//Server External Libraries Folder
app.use('/libs', express.static(__dirname + "/../libraries"));


 //Ex: <script src="libs/threejs/threejs.js">
 //Will load libraries/threejs/threejs.js