从 node-static 切换到 express
Switch from node-static to express
我在 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);
...
现在我需要从 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 连接。
怎么了?请注意,该解决方案应该适用于本地主机和 Heroku。
我使用以下代码解决了我的问题:
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 的提示。
我在 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);
...
现在我需要从 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 连接。 怎么了?请注意,该解决方案应该适用于本地主机和 Heroku。
我使用以下代码解决了我的问题:
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 的提示。