使用socket.io nodejs提供自定义静态文件服务

3
我尝试在服务器和客户端之间共享我的代码,我使用以下代码(app.js):

我尝试在服务器和客户端之间共享我的代码,我使用以下代码(app.js):

var io = require('socket.io').listen(8000), 
  Static = require('socket.io').Static; 

io.configure(function () {
  var _static = new Static(io); 

  // some methods to add my custom files 

  _static.add('\public\test.js');
  io.set('static', _static);
});

我的文件结构如下:

  1. 根目录
    • app.js
    • public
      • test.js

当我输入"http://localhost:8000/public.test.js"时,浏览器会默认下载文件"Welcome to socket.io"

1个回答

7
这个问题比较老,但以下是当前的做法(适用于v0.9):
var io = require('socket.io').listen(8000);
io.static.add('/path/for/request.js', {file: 'path/to/file.js'});

请注意,资源的路径是相对于socket.io路径的,因此请求URI将类似于:
http://localhost:8000/socket.io/path/for/request.js

如果您看到像“协议版本不支持”这样的错误,则意味着您的请求URI可能具有管理员无法支持的扩展名。以下是如何添加该支持:
io.static.add('/path/for/request.foo', {
  mime: {
    type: 'application/javascript',
    encoding: 'utf8',
    gzip: true
  },
  file: 'path/to/file.js'
});

文档指向他们自己的静态库以获得工作实现。

该死,只读了前三行代码就花了60分钟时间,“为什么路径不起作用!!!” 呃。。。 - user405398
你如何提供文件夹中的所有文件? - user405398
我找不到 io.static.add 的文档,你能给我指一下吗? - user405398
1
该仓库已更新至“即将到来”的1.0版本,并且文档在readme中可见。对于此答案指向的v0.9版本,wiki指向了他们自己的实现。 - cmbuckley
'path/to/file.js' 似乎是相对于某个我找不到的 socket.io 目录。如果你使用 __dirname + '/path/to/file.js',它将变成相对于你当前的 js 文件(很可能是你的 app.js)。 - Jörn Berkefeld

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接