2015-01-27 2 views
-1

У меня есть простое приложение, работающее на node.js с websockets. Это приложение использует узел-статический модуль для обслуживания некоторых html-страниц с помощью css, js и т. Д. Структура папок заключается в следующем:Переключение с узла-статического на экспресс

-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); 

... 

Теперь мне нужно перейти от узла статического Экспресс, потому что мне нужно использовать маршруты. Я использовал этот код, но он не работает:

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); 

... 

Я могу обслуживать файлы, однако он прерывает соединение с веб-разъемом. Что случилось? Обратите внимание, что решение должно быть подходящим для работы на localhost и Heroku.

+0

Я предполагаю, что вы запускаете сервер над '/ app', поэтому он не должен быть' res.sendfile (__ dirname + '/app/index.html'); '? – Tony

+0

@ Тони это работает одинаково, однако оба сломаны соединение с websocket. – ltedone

+0

Я вижу. Определите разбитый. Вы получаете какие-либо ошибки? определяется 'onRequest'? К сожалению, большая часть моего опыта связана с socketio. – Tony

ответ

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 за подсказку.

Смежные вопросы