Сервер NodeJS, res.sendfile возвращает HTML, но не «включает jscript» ()

#javascript #html #node.js

#javascript #HTML #node.js

Вопрос:

В принципе, я хочу создать сервер, а затем простой javascript-сайт с phaser, чтобы попробовать кое-что, но показывает 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');
});
 

В основном game.js появляется, если я только открою index.html в браузере, но не в том случае, если я делаю ‘node server.js «а затем перейдите к localhost: 1337, тогда он будет показывать только «тест» (обычный текст), но не Javascript. Я не был уверен, что я должен был указать в качестве заголовка, извините, если это вводит в заблуждение / не имеет смысла.

Ответ №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.

Комментарии:

1. Отредактировал express.static в app.static, но я все еще получаю эту ошибку: puu.sh/9JrFi/4767373cb3.png (не имеет метода ‘static’) И если бы я не редактировал его для этого, я попробовал express.static, и он говорит, что express не определен.

2. Да, только что попробовал, но он говорит, что не имеет метода ‘static’. Вот код: puu.sh/9Js1C/2cde44063d.png и вот в чем ошибка: puu.sh/9Js4C/307a0da53a.png

3. Теперь ошибок нет, но неограниченное время загрузки для localhost:1337 😛

4. Находятся ли ваши файлы javascript в public папке?

5. Кто-нибудь может мне помочь с этим? 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" );
 })
 

и это сработало!

Комментарии:

1. что такое sendFile здесь, я получаю ошибку типа has no method 'sendFile'

2. спасибо за ваш ответ, теперь он работает нормально, я не обновлял свою версию

Ответ №4:

У меня была такая же проблема с sendfile, возвращающим HTML, но не < script src>

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

Что было исправлено путем добавления статической папки, содержащей скрипт

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