2014-06-25 2 views
5

Grundsätzlich möchte ich einen Server und dann eine einfache Javascript-Site mit Phaser machen, um einige Sachen zu versuchen, aber die HTML-Zeug zeigt, aber nicht die Javascript.NodeJS Server, res.sendfile HTML, aber nicht die "jscript includes" (<script src>)

Hier sind meine verschiedenen Dateien & Codes:

index.html:

<!doctype html> 
<html> 
<center> 
<body> 
test 
    <script src="http://code.jquery.com/jquery-latest.min.js"></script> 
    <script src="phaser.min.js"></script> 
    <script src="game.js"></script> 
    <div id='game'></div> 
    </body> 
</center> 
</html> 

game.js:

var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'game', { preload: preload, create: create, update: update }); 

function preload() { 
    game.load.image('char', 'char.png'); 
} 

var sprite; 
var cursors; 

function create() { 
    game.physics.startSystem(Phaser.Physics.P2JS); 
    game.physics.p2.defaultRestitution = 0.8; 
    sprite = game.add.sprite(200, 200, 'char'); 
    game.physics.p2.enable(sprite); 
    sprite.body.setZeroDamping(); 
    sprite.body.fixedRotation = true; 
    text = game.add.text(20, 20, 'l2arrowkeys', { fill: '#ffffff' }); 
    cursors = game.input.keyboard.createCursorKeys(); 
} 

function update() { 

sprite.body.setZeroVelocity(); 

    if (cursors.left.isDown) 
    { 
    sprite.body.moveLeft(200); 
    } 
    else if (cursors.right.isDown) 
    { 
    sprite.body.moveRight(200); 
    } 

    if (cursors.up.isDown) 
    { 
    sprite.body.moveUp(200); 
    } 
    else if (cursors.down.isDown) 
    { 
    sprite.body.moveDown(200); 
    } 

} 

server.js:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
app.get('/', function(req, res){ 
    res.sendfile('index.html'); 
}); 
io.on('connection', function(socket){ 
    console.log('a user connected'); 
    socket.on('disconnect', function(){ 
    console.log('a user disconnected'); 
    }); 
}); 
http.listen(1337, function(){ 
    console.log('listening on *:1337'); 
}); 

Basicall y Die Datei game.js erscheint, wenn ich die index.html nur in einem Browser öffne, aber nicht, wenn ich 'node server.js' benutze und dann zu localhost: 1337 gehe, dann würde nur der 'test' angezeigt (einfacher Text)), aber nicht das Javascript. Ich war mir nicht sicher, was ich als Titel hätte sagen sollen, tut mir leid, wenn es irreführend ist/macht keinen Sinn.

Antwort

12

Sie müssen eine statische Datei an der Spitze des Stapels dient, Middleware enthalten:

var express = require('express'); 
var app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
app.use(express.static(__dirname + '/public')); 
app.get('/', function(req, res){ 
    res.sendfile('index.html'); 
}); 
// ... 

Also, wenn Sie Dateien in einem Unterverzeichnis ‚public‘ (relativ zu dem das Skript ist) mit dem Namen setzen Sie Ihre js, Der Browser sollte auf die Javascript-Dateien zugreifen können.

+0

Bearbeitet express.static zu app.static, aber ich bekomme immer noch diesen Fehler: http://puu.sh/9JrFi/4767373cb3.png (hat keine Methode 'statisch') Und wenn ich es nicht zu bearbeiten wäre Ich habe express.static ausprobiert und es heißt, dass Express nicht definiert ist. – prk

+0

Ja, gerade versucht es, aber es sagt, hat keine Methode 'statisch'. Hier ist der Code: http://puu.sh/9Js1C/2cde44063d.png und hier ist der Fehler: http://puu.sh/9Js4C/307a0da53a.png – prk

+0

Keine Fehler jetzt, aber unbegrenzte Ladezeit für localhost: 1337 : P – prk

0

Sie konfigurieren nicht gut Express. Die statische Middleware behandelt den Inhalt eines Verzeichnisses. In diesem Fall wird das "public" -Verzeichnis bereitgestellt und jeder Inhalt (HTML, CSS, JavaScript) wird verfügbar sein. Benötigt die (express.static (___dirname + '/ app')); auf Ihrer ausdrückliche Konfiguration

app.configure(function() { 
    app.use(express.logger()); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.static(__dirname + '/app')); 

    app.set('PORT', 3000); 

}); 
1

hatte ich das gleiche Problem, weil die Express-Version war, habe ich es auf die 4.x-Version aktualisieren, und ich begann, verschiedene Fehler zu bekommen (was gut war) und dann habe ich unter Befehl:

app.get('/home', function (req, res) { 
    res.sendFile(__dirname + "/public/" + "index.html"); 
}) 

und es hat funktioniert!

+0

Was ist sendFile hier Ich erhalte einen Fehler wie 'hat keine Methode 'sendFile'' –

+0

können Sie Ihren Code einfügen? –

+0

danke für deine Antwort jetzt funktioniert es gut Ich habe meine Version nicht aktualisiert –

Verwandte Themen