【问题标题】:NodeJS server, res.sendfile returning HTML but not the "jscript includes" (<script src>)NodeJS 服务器,res.sendfile 返回 HTML 但不是“jscript 包含”(<script src>)
【发布时间】:2014-08-16 02:45:42
【问题描述】:

基本上我想创建一个服务器,然后创建一个带有移相器的简单 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,那么它只会显示“测试” (纯文本),但不是 Javascript。我不确定我应该把什么作为标题,如果它具有误导性/没有意义,我很抱歉。

【问题讨论】:

    标签: javascript html node.js


    【解决方案1】:

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

    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 文件。

    【讨论】:

    • 已将 express.static 编辑为 app.static 但我仍然收到此错误:puu.sh/9JrFi/4767373cb3.png(没有方法“静态”)如果我不对其进行编辑,我尝试了 express.static它说 express 没有定义。
    • 是的,刚试过,但它说没有“静态”方法。这是代码:puu.sh/9Js1C/2cde44063d.png,这是错误:puu.sh/9Js4C/307a0da53a.png
    • 现在没有错误,但 localhost:1337 的加载时间不受限制:P
    • 您的 javascript 文件是否在 public 文件夹中?
    • 谁能帮我解决这个问题? c:
    【解决方案2】:

    您没有配置好快递。 静态中间件处理从目录提供内容。在这种情况下,提供了“公共”目录,并且任何内容(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】:

      由于 Express 版本,我遇到了同样的问题,我将它升级到 4.x 版本,然后我开始收到不同的错误(这很好),然后我使用了以下命令:

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

      它成功了!

      【讨论】:

      • 这里的 sendFile 是什么我收到类似has no method 'sendFile'的错误
      • 感谢您的回复,现在它工作正常,我没有升级我的版本
      【解决方案4】:

      sendfile 返回 HTML 但不是

      res.sendFile(path.join(__dirname+'/myFile/index.html'))
      

      已通过添加包含脚本的静态文件夹修复此问题

      app.use(express.static(path.join(__dirname, 'myFile')));
      

      【讨论】:

        猜你喜欢
        • 2014-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-02
        • 2019-11-11
        • 2017-12-31
        • 1970-01-01
        • 2020-05-05
        相关资源
        最近更新 更多