首页 > 解决方案 > 如何使用 Express 3.x 从较低目录提供文件?

问题描述

这个答案清楚地说明了如何从比程序根目录更低的目录提供文件,如下所示:

var path = require('path');
var express = require('express');
var app = express();
app.use(express.static(path.join(__dirname, '../public')));

这工作得很好。现在我正在尝试像这样设置 socket.io 服务器:

const express = require('express');
const server = express();
const io = require('socket.io')(server);

并且 socket.io 正在抛出错误:

错误:您正在尝试将 socket.io 附加到快速请求处理程序函数。请传递一个 http.Server 实例。

这是有道理的,因为现在在 socket.io 文档中,它要求这样的设置:

const app = require('express')();
const server = require('http').createServer(app);
const io = require('socket.io')(server);
io.on('connection', () => { /* … */ });
server.listen(3000);

但我不知道如何协调从较低目录加载文件的旧方法,如上面的答案所示,与这种设置 express 和 socket.io 的新方法,因为在const app = require('express')();socket.io 文档中,错误被抛出TypeError: app.static is not a function

如何协调现在过时的快速路径路由与新的快速设置?

标签: node.jsexpresssocket.io

解决方案


这就是我在 express 3.x 的旧时代所做的方式。

var path = require('path');
var http = require('http');
var express = require('express');
var app = express();
app.use(express.static(path.join(__dirname, '../public')));
/* ... more routing logic, i.e app.get(...)*/
var server = http.createServer(app);
var io = require('socket.io')(server);
io.on('connection', () => {/* ... */});
server.listen(3000);

希望能帮助到你


推荐阅读