Переключиться с нод-статики на экспресс
У меня есть простое приложение, работающее на node.js с веб-сокетами. Это приложение использует статический модуль для обслуживания некоторых 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.
1 ответ
Я решил свою проблему, используя следующий код:
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 за подсказку.