我在使用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 ...
我的文件也是这样组织的:
根据我想要运行的版本,打开该版本的目录并运行其server.js文件。该行使用行app.use(express.static(__dirname + "/client"))
将客户端重定向到/client/index.html。但现在只有<script></script>
或<link>
标签才能访问客户端文件夹中的文件,但不能访问我在各个版本中使用的库文件夹中的那些库。
如何更改我的代码,以便能够从/version_x/client/index.html访问libraries文件夹中的文件,同时仍然将客户端指向正确的html文件?
注意:由于这个问题,在过去几周我一直在学习Node.js,我被迫只使用支持CDN的库。
答案 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