4
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'

私は何か間違ったことをしていると思いますが、私は本当に何を考えることができません。多分私は十分早く寝るべきです:)

4

2 に答える 2

6

Express 3の時点でのAPIは、プレーンExpressモジュールをアプリインスタンスから分離する必要があるということです。

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'));
于 2013-03-10T01:38:03.303 に答える
1

express.static()問題は、ではなく、を使用する必要があることですapp.static()。あなたの例では、アプリは効果的に作成されました

var express = require('express');
var app = express();

しかし、あなたはそれをに短縮しました

var app = require('express')();

これを行ったため、再度使用する以外にベースエクスプレスオブジェクトへの参照はありませんrequire('express')。これは、静的に使用する必要のある参照です。

これは2つの方法で修正できます。

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を参照する場合は常にこれを行う必要があります。このオプションは試していませんが、機能すると思います。

私は間違いなくオプション1をお勧めします。また、アプリの構成などを行った後、サーバーを作成する必要があります。

于 2013-03-10T01:38:34.897 に答える