var app = require('express')()
, server = require('http').createServer(app)
, io = require('socket.io').listen(server);
server.use(app.static('public'));
server.listen(3000);
app.get('/', function (req, res) {
res.sendfile('index.html');
});
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
我只是试图启动非常小的工作项目,但是当涉及到静态内容时我就陷入了困境。我检查了其他类似的线程,但我不知道为什么它不适合我。我刚收到这个错误:
server.use(app.static('public'));
^
TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'static'
我想我做错了什么,但我真的不知道是什么。也许我应该尽快上床睡觉:)。
答案 0 :(得分:6)
快递3的API是您需要将普通快递模块与您的应用实例分开。
var express = require('express'); //do NOT invoke the function here
var app = express(); //DO invoke it here to get app
app.use(express.static(__dirname + '/public'));
答案 1 :(得分:1)
问题是您需要使用express.static()
,而不是app.static()
。在您的示例中,应用程序是由
var express = require('express');
var app = express();
但是你把它缩短为
var app = require('express')();
因为你这样做了,除了再次使用require('express')
之外,你没有任何对基本快捷对象的引用,这是你需要使用静态的参考。
您可以通过以下两种方式解决此问题。
1)将您的开始代码更改为
var express = require('express')
, app = express()
, server = require('http').createServer(app)
, io = require('socket.io').listen(server);
和你的配置
app.use(express.static(path.join(__dirname, 'public')));
2)只需将配置更改为
即可app.use(require('express').static(path.join(__dirname, 'public')));
但是,无论何时引用Express,都必须这样做。请注意,我没有尝试过这个选项,但我认为它会起作用。
我肯定会推荐第一选项。此外,您应该在完成配置后为应用程序创建服务器。