-1

我有一个使用 websockets 在 node.js 上运行的简单应用程序。这个应用程序使用 node-static 模块为一些带有 css、js 等的 html 页面提供服务。文件夹结构是这样的:

-app
    - index.html
    - server.js
    - img/
        - base.png
        - sub/
            - sub.png
    - scripts
        - base.js
        - sub/
            - sub.js
    - css
        - base.css
        - sub/
            - sub.css

其中 server.js 是服务器文件。在 server.js 中有以下代码:

var static = require('node-static');
var http = require('http');
var file = new(static.Server)();

var app = http.createServer(function (req, res) {
  file.serve(req, res);
}).listen(process.env.PORT || 1234);

var WebSocketServer = require('websocket').server;
new WebSocketServer({
  httpServer: app,
  autoAcceptConnections: false
}).on('request', onRequest);

...

现在我需要从 node-static 切换到 Express,因为我需要使用路由。我使用了这段代码,但是它不起作用:

var express = require('express');
var app = express();
var http = require('http');
var httpServer = http.Server(app);

app.use(express.static(__dirname+'/app'));

app.get('/', function(req, res){
    res.sendfile(__dirname + '/index.html');
});
app.listen(1234);

var WebSocketServer = require('websocket').server;
new WebSocketServer({
  httpServer: app,
  autoAcceptConnections: false
}).on('request', onRequest);

...

我可以提供文件,但是它会中断 websocket 连接。怎么了?请注意,该解决方案应该适合在 localhost 和 Heroku 上工作。

4

1 回答 1

0

我使用以下代码解决了我的问题:

var http = require("http");
var express = require("express");
var app = express();
var port = process.env.PORT || 1234;

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

var server = http.createServer(app);
server.listen(port);

console.log("http server listening on %d", port);

var WebSocketServer = require('websocket').server;
new WebSocketServer({
  httpServer: server,
  autoAcceptConnections: false
}).on('request', onRequest);

...

此代码源自https://devcenter.heroku.com/articles/node-websockets,但是我的代码使用“websocket”节点模块而不是“ws”。感谢@Tony 的提示。

于 2015-01-29T15:57:59.000 回答