NodeJS服务器,res.sendfile返回HTML而不是“jscript includes”(<script src =“”>)</script>

时间:2014-06-25 13:40:47

标签: javascript html node.js

基本上我想制作一个服务器然后用一个简单的javascript网站和phaser来尝试一些东西,但html的东西显示,但不是javascript。

以下是我的不同文件&amp;代码:

的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');
});

基本上,如果我只在浏览器中打开index.html,则会显示game.js,但如果我执行“node server.js”,则不会显示。然后转到localhost:1337,那么它只会显示&#39; test&#39; (纯文本),但不是Javascript。我不确定我应该把它作为标题,对不起如果它有误导性/毫无意义。

4 个答案:

答案 0 :(得分:13)

您需要在堆栈顶部包含一个提供中间件的静态文件:

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');
});
// ...

因此,如果您将js文件放在名为&#39; public&#39;的子目录中(相对于脚本所在的位置),浏览器应该能够访问javascript文件。

答案 1 :(得分:1)

我有同样的问题,因为Express版本,我将它升级到4.x版本,我开始得到不同的错误(这很好)然后我用下面的命令:

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

它有效!

答案 2 :(得分:0)

你没有配置好表达。 静态中间件处理从目录提供内容。在这种情况下,“公共”目录被提供,任何内容(HTML,CSS,JavaScript)都可用。 在您的快速配置上需要(express.static(__ dirname +'/ app'));

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);

});

答案 3 :(得分:0)

sendfile返回HTML时遇到了同样的问题,但