NodeJS服务器,res.sendfile返回HTML,但不包含“ jscript包含”()

问题描述 投票:6回答:4

基本上,我想制造一个服务器,然后创建一个带有相位器的简单javascript网站,以尝试一些操作,但是显示html内容,而不显示javascript。

这是我不同的文件和代码:

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,则不会显示,那么它只会显示'test'(纯文本),而不是Javascript。我不确定标题应该写什么,对不起,如果它引起误解/没有任何意义。

javascript html node.js
4个回答
14
投票

您需要在堆栈顶部包括一个静态文件服务中间件:

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文件放在名为“ public”(相对于脚本所在的位置)的子目录中,则浏览器应该能够访问javascript文件。


1
投票

您的配置不够明确。静态中间件负责处理目录中的内容。在这种情况下,将提供“公共”目录,并且所有内容(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);

});

1
投票

我有一个相同的问题,因为Express版本,我将其升级到4.x版本,开始出现不同的错误(很好),然后在下面的命令中使用了:


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.